遍历文件的每一行
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
,这显然失败了,使流处于失败状态,并跳出循环。
将 boilPoint
从 int
更改为 double
,事情应该会更好。
我正在构建一个程序,该程序读取一个文件作为输入,将文件输出到控制台并对某些输入执行一些计算。输入文件是物质及其沸点的列表,如下所示:
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
,这显然失败了,使流处于失败状态,并跳出循环。
将 boilPoint
从 int
更改为 double
,事情应该会更好。