无法从C ++中的文件中获取数据

时间:2017-10-24 18:55:40

标签: c++ file text file-io text-files

我一直在尝试用循环读取文本文件。但由于某种原因,它似乎永远不会得到正确的整数值。我总是最终得到垃圾值。

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 

1 个答案:

答案 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++;
    }
}