我正在尝试读取names.txt文件中的数据,并输出每个人的全名和理想体重。使用循环从文件中读取每个人的姓名和英尺。 该文件为:
Tom Atto
6
3
Eaton Wright
5
5
Cary Oki
5
11
Omar Ahmed
5
9
我正在使用以下代码:
string name;
int feet, extraInches, idealWeight;
ifstream inFile;
inFile.open ("names.txt");
while (getline(inFile,name))
{
inFile >> feet;
inFile >> extraInches;
idealWeight = 110 + ((feet - 5) * 12 + extraInches) * 5;
cout << "The ideal weight for " << name << " is " << idealWeight << "\n";
}
inFile.close();
当我运行这个即时输出时:
The ideal weight for Tom Atto
is 185
The ideal weight for
is -175
答案 0 :(得分:1)
在读取两个extraInches值后,在while循环中添加此语句。
inFile.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
在'\n'
循环中读取的第二个整数后忽略while
。您可以参考:Use getline and >> when read file C++
答案 1 :(得分:0)
你遇到了问题,因为在行
之后inFile >> extraInches;
在循环的第一次迭代中执行,流中仍然有换行符。下一次调用getline
只会返回一个空行。随后的电话
inFile >> feet;
失败,但您没有检查通话是否成功。
我想提及与您的问题相关的一些事情。
使用getline
混合未格式化的输入,并使用operator>>
格式化输入充满了问题。避免它。
要诊断与IO相关的问题,请务必在操作后检查流的状态。
在您的情况下,您可以使用getline
读取文本行,然后使用istringstream
从行中提取数字。
while (getline(inFile,name))
{
std::string line;
// Read a line of text to extract the feet
if ( !(inFile >> line ) )
{
// Problem
break;
}
else
{
std::istringstream str(line);
if ( !(str >> feet) )
{
// Problem
break;
}
}
// Read a line of text to extract the inches
if ( !(inFile >> line ) )
{
// Problem
break;
}
else
{
std::istringstream str(line);
if ( !(str >> inches) )
{
// Problem
break;
}
}
idealWeight = 110 + ((feet - 5) * 12 + extraInches) * 5;
cout << "The ideal weight for " << name << " is " << idealWeight << "\n";
}