我一直在尝试用循环读取文本文件。但由于某种原因,它似乎永远不会得到正确的整数值。我总是最终得到垃圾值。
while(!file.eof()) // I've also tried other variations of this while loop, none of which worked either
{
// ifstream, string, char, string, int
file >> name >> sex >> data >> score;
std::cout << name << std::endl;
if (sex == 'F')
{
femaleAverage += score;
femaleCount++;
}
else
{
maleAverage += score;
maleCount++;
}
if (data.compare("CC"))
{
comAverage += score;
comCount++;
}
else
{
uniAverage += score;
uniCount++;
}
}
以下是文本文件的样子:
Bailey M CC 68
Harrison F CC 71
Grant M UN 75
Peterson F UN 69
Hsu M UN 79
Bowles M CC 75
Anderson F UN 64
Nguyen F CC 68
Sharp F CC 75
Jones M UN 75
McMillan F UN 80
Gabriel F UN 62
答案 0 :(得分:0)
根据您的if
语句,sex
被视为char
而不是char*
或std::string
。当你使用file >> sex
时,它会将文件中的下一个字符读入变量而不跳过空格,就像它对字符串或数字一样。因此,sex
获取名称后的第一个空格,然后将文件的性别字段读入data
,并尝试将数据字段读入score
。
在阅读之前,您可以使用std::skipws
值跳过空格。
您也不应该使用while (!file.feof())
,请参阅Why is iostream::eof inside a loop condition considered wrong?。
因此代码应如下所示:
while (file >> name >> std::skipws >> sex >> data >> score) {
std::cout << name << std::endl;
if (sex == 'F')
{
femaleAverage += score;
femaleCount++;
}
else
{
maleAverage += score;
maleCount++;
}
if (data.compare("CC"))
{
comAverage += score;
comCount++;
}
else
{
uniAverage += score;
uniCount++;
}
}