读取文件C时使用getline和>>

因为来自文件的数据如下所示:第1行是名称(第一个最后一个),下一行是得分(得分1得分2 ……得分5)等等……所以我认为我需要getline for name和>&gt ;得分

数据文件的示例

David Beckham
80 90 100 20 50
Ronaldinho Gaucho
99 80 100 20 60
....

首先,我有结构

struct Player {
string name;
int score[5];
} player[size]

从文件中读取数据时

int i = 0;
while(!file.eof())
    {
        for (int j = 0; j < 2; j++) //read each 2 two lines
        {               
            if(j==0) // name
            {               
                getline(file, player[i].name);  
            }
                        else if(j==1) // score
            {
                for(int k=0; k<5; k++) file >> player[i].grade[k];
            }
                }
         i++; //move to next player
    }

问题是在读完所有分数(第一个玩家)之后,似乎没有去下一行继续读下一个名字,那里有点乱.那么有任何建议来纠正我的代码或新想法吗?

解决方法:

在读完最后一个分数后,换行符仍然位于输入缓冲区上.你需要跳过它. ignore功能对此非常有用.

getline(file, player[i].name);
for (int k = 0; k < 5; ++k)
  file >> player[i].grade[k];
file.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

根据需要检查错误. >> operator,getline和ignore all返回流引用,您可以检查是否成功.

因为每次迭代都完全不同,所以不需要j循环.只需写入j = 0的情况,然后立即执行j = 1的情况,然后摆脱循环,就像上面的代码一样. (并注意j在循环内永远不会等于2,所以无论如何你的情况都是错的.)

上一篇:OpenStack里对VPN的支持


下一篇:C++输入小结