2013-03-25 85 views
0

这是我到目前为止的代码。我从输入文件中获取数据。该文件包含我调用的每个变量所需的所有数据,但是当我运行它时,我只获得一次迭代,然后退出循环。我需要它运行,直到它到达文件的末尾。为什么在第一次迭代后C++ 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; 
} 
+4

我征服你找到一个更具描述性的标题你的问题...大多数人在这里(包括我)问问题关于我们自己的错误或碰撞。 – Barranka 2013-03-25 22:23:02

+0

用cout <<“Here”:)开始调试 – 2013-03-25 22:25:13

+0

我建议您将您正在使用的编程语言添加到标签中。通过进入帖子,我可以清楚地看到它是C++,但是我认为如果你添加它,你可以得到更多的结果并以更快的方式。 – 2013-03-25 22:27:53

回答

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; 

我haven`t见过你的文件结构,但我客串此代码段将工作。

+0

谢谢我最终做了这样的事情,但使用while(pTemp >> pnumber),而不是cin.good,它似乎工作相同。非常感谢。 – 2013-03-26 01:03:14

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循环使用你的电话号码串数数序列搞乱。

当第一次检查第二次时,它无法找到一个数字,因为最内部的循环已经将每个数字都提取到第一个字符串并退出。

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

+0

啊,非常感谢,我帮了我很多。 – 2013-03-26 01:00:35

相关问题