C ++将文件输入中的单词分配给字符串或整数

时间:2016-03-10 03:19:40

标签: c++ file ifstream getline

我需要以这种格式打开文件

Firstname Lastname 1 2 3 4 5

Firstname Lastname 2 3 4 5 6

我需要将一行的第一个名称分配给结构的成员数组,并将该行的最后一个名称分配给结构的另一个成员,并将该行的每个数字分配给结构中的分数数组,每个新行进行到结构数组的下一个索引,做同样的事情(对不起,如果我措辞严重)。

我不太担心分数分配我知道如何做到这一点但是现在我尝试使用getline一次将每个单词分配给结构内的字符串但是当我运行代码时,它跳过第一行并输入第二行的名字和姓氏,我无法弄清楚如何从第一行开始。

这是我的代码

ifstream fin;
fin.open("Scores.txt");
if (!(fin.is_open()))
    cout << "Failed to open file.\n";

if (stuCount < 10)
{
    for (int n = 0; !fin.eof();)
    {
        for (string line[10]; getline(fin, line[n]); n++)
        {
            fin >> students[stuCount].fname >> students[stuCount].lname;
            stuCount++;
            cout << line[n] << endl;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您的问题是getline和(&gt;&gt;)运算符都在提升流中读缓冲区的位置。你需要缓冲你对getline的调用。

更改代码的想法是:

ifstream fin("Scores.txt", ifstream::in);
if (!fin.is_open()) {
cout << "Failed to open file." << endl;
    return -1;
}

if (stuCount < 10)
{
    while (!fin.eof())
    {
        string line;
        getline(fin, line);
        stringstream ss(line);
        ss >> students[stuCount].fname >> students[stuCount].lname;
        cout << line << endl;
        stuCount++;
    }
}