为什么第一次迭代后C ++ io流的循环会中断?

时间:2013-03-25 22:21:29

标签: c++ loops while-loop file-io

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

#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 << "Number\t" << "Planet Name\t" << "Diameter\t" << "Celsius\t" << "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;
}

2 个答案:

答案 0 :(得分:1)

while (cin.good)
{
    pTemp >> pNumber >> pName >> pSize >> cTemp >> pNumber;
    cout << pNumber << " " << pName << " " << pSize << " ";
    fTemp = 9 * (cTemp) / 5 + 32;
    cout << cTemp << " " << fTemp << endl;

}
return 0;

我没有看到你的文件结构,但我猜这个代码片段会起作用。

答案 1 :(得分: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

并且你的程序在最里面的循环中获取它可以使用你的number-string-number-number序列的所有数字。

当第一次检查第一次时,它找不到一个数字,因为最里面的循环已经取出每个数字直到第一个字符串并且它退出。

使用while()s是一个糟糕的选择,尝试将文件解析为spin_eight建议。