遍历文件的每一行

Iterating through each line of a file

我正在构建一个程序,该程序读取一个文件作为输入,将文件输出到控制台并对某些输入执行一些计算。输入文件是物质及其沸点的列表,如下所示:

Acetaldehyde    20.8
Acetone     50.5
Acetylene   -84
Ammonia     -35.5

总共有比这多 4 倍的物质。我的问题是读取文件的每一行。到目前为止,我将读取第一行,然后终止我的循环。每当我尝试使用 getline 时,我最终只会得到温度而不是名称。

using namespace std;

int main()
{
   ifstream inData;
   inData.open("input.txt");

   string substanceName;
   int boilPoint, min, max;

   cout << "Common Chemicals and Substances: " << endl;
   cout << endl;
   cout << left << setw(20) << "Substance" << right << " " << "Boiling Point" << endl;
   cout << setw(35) << setfill('-') << " " << endl;
   cout << setw(35) << setfill(' ') << " " << endl;

   inData >> substanceName >> boilPoint;
   while (inData)
   {
      cout << left << setw(20) << substanceName
           << right << " " << boilPoint << endl;
      inData >> substanceName >> boilPoint;
   }
   inData.close();
   return 0;
}

输出看起来正确,但缺少文件中的所有其他物质


Substance            Boiling Point
---------------------------------- 

Acetaldehyde         20

我在这里的主要目标是遍历每一行而不进入更复杂的代码。我认为我的循环有问题,但我无法找出问题所在。或者我应该使用 getline 但我不明白如何使用它,也不知道从文件中传入的字符串和 int 变量。

您试图以整数形式读取沸点,但在文件中它是浮点数。因此,它停止读取 . 处的第一个沸点(这就是乙醛的沸点显示为 20 而不是文件中包含的 20.8 的原因)。这使事情不同步,因此它尝试将 .8 读取为第二个名称(成功,即使它不是您想要的),但随后尝试将下一个名称 (Acetone) 读取为 int,这显然失败了,使流处于失败状态,并跳出循环。

boilPointint 更改为 double,事情应该会更好。