【问题标题】:C++ Assigning words from file input to strings or intsC ++将文件输入中的单词分配给字符串或整数
【发布时间】:2016-03-10 03:19:40
【问题描述】:

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

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;
        }
    }
}

【问题讨论】:

    标签: c++ file ifstream getline


    【解决方案1】:

    您的问题是 getline 和 (>>) 运算符都在推进读取缓冲区在流中的位置。您需要缓冲对 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++;
        }
    }
    

    【讨论】:

    • 感谢您的回复。不幸的是,我们还没有在课堂上讨论过字符串流,所以我不能使用它。你知道其他方法吗?
    • @DatNguyen 那么你的原始问题是正确的,你只需要修复你的循环。将 for 循环更改为类似于我发布的 while 循环。
    • 不幸的是,当我使用该循环时,它仍然会跳过第一行。
    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 2018-09-28
    • 2012-02-19
    • 1970-01-01
    • 2015-09-15
    • 2014-03-06
    相关资源
    最近更新 更多