为什么c++ io流的循环在第一次迭代后中断

Why does the loop with C++ io streams break after first iteration?

本文关键字:第一次 迭代 中断 循环 c++ io 为什么      更新时间:2023-10-16

这是我到目前为止的代码。我从一个输入文件得到我的数据。这个文件有我调用的每个变量所需的所有数据,但是当我运行它时,我只得到一次迭代,然后它退出循环。我需要它运行到文件的末尾。

#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
using namespace std;
int main ()
{
    ifstream pTemp("PlanetCelsius.dat");
    int pNumber, pSize;
    string pName;
    double cTemp, fTemp;
    cout << "Numbert" << "Planet Namet" << "Diametert" << "Celsiust" << "Fahrenheit" << endl;
        while (pTemp >> pNumber) 
        {
            while (pTemp >> pName) 
            {
                while (pTemp >> pSize) 
                {
                    while (pTemp >> cTemp) 
                    {
                        pTemp >> pNumber;
                        cout << pNumber << " ";
                    }
                pTemp >> pName;
            cout << pName << " ";
                }
        pTemp >> pSize;
        cout << pSize << " ";
            }
    pTemp >> cTemp;
    fTemp = 9 * (cTemp) / 5 + 32;
    cout << cTemp << " " << fTemp << endl;
        }
    system ("PAUSE");
        return 0;
}
while (cin.good)
{
    pTemp >> pNumber >> pName >> pSize >> cTemp >> pNumber;
    cout << pNumber << " " << pName << " " << pSize << " ";
    fTemp = 9 * (cTemp) / 5 + 32;
    cout << cTemp << " " << fTemp << endl;
}
return 0;

我还没有看到你的文件结构,但我想这个代码片段可以工作。

你在做:

while(there's a number)
  while(there's a string)
    while(there's a number)
     while(there's a number)
     take first number
    take first string
  take first number
take first number

,你的程序在最内层的while循环中获取所有可能的数字,这会扰乱你的number-string-number-number序列。

当第一个while循环第二次检查时,它找不到一个数字,因为最里面的循环已经取出了第一个字符串之前的所有数字,它退出了。

使用while()s是一个糟糕的选择,请尝试按照spin_eight建议的方式解析文件。