我正在构建一个程序,该程序读取文件作为输入,将文件输出到控制台,并对某些输入执行一些计算。输入文件是物质及其沸点的列表,如下所示:
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
读取为第二个名称(即使不是您想要的名称,它也会成功),但随后尝试将下一个名称(丙酮)读取为int
,这显然失败了,使流处于失败状态,并中断了循环。
将boilPoint
从int
更改为double
,并且应该可以更好地工作。