C++ 使用ifstream讀取數據,多讀最后一行問題解決方法


C++文件讀取時有一個bug,就是使用eof()判斷文件結尾並不准確,最后一行會重復讀取一次,可采用以下方法避免重復讀取:

    while (!inFile.eof())
    {
        inFile >> …… >>;
        
        inFile.get(); // 讀取最后的回車符  
        if(inFile.peek() == '/n') 
            break; 
    }

 C語言多讀一行,解決方案如下:逐行讀取,判斷每一行是否獲取成功,獲取成功則讀取,否則中斷

    FILE *fp = fopen(fileName.c_str(), "r");
    if (fp)
    {
        while (!feof(fp))
        {
            char line[512];
            if (!fgets(line, 511, fp))
            {
                break;
            }

            sscanf(line, "%lf%lf%lf", &pot.x, &pot.y, &pot.z);

            tempPt.push_back(pot);

            if (pot.x > maxX) maxX = pot.x; if (pot.x < minX) minX = pot.x;
            if (pot.y > maxY) maxY = pot.y; if (pot.y < minY) minY = pot.y;
            if (pot.z > maxZ) maxZ = pot.z; if (pot.z < minZ) minZ = pot.z;
        }
        fclose(fp);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM