如何读取文件中的交替文本行以在C ++中分隔数组?

时间:2013-11-01 20:46:26

标签: c++ arrays file input eol

任务是成为一名考试评分员。该文件的第一行是所有答案 并且下一行在学生姓名(最后,第一)之间交替,并且他们是以下行的答案。我能够传递测试密钥答案,但是当我尝试使用getline()函数时,它不会将值存储到数组的第一个索引,而cin.ignore()只会导致我的程序冻结。我从哪里开始?

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

typedef char answerKey[30];
typedef string studentNames[25];

int main()
{

    fstream inFile;

    inFile.open("xfile.txt");
    if (!inFile)
    {
        cout << "ERROR FILE NOT FOUND" << endl;
        return (EXIT_FAILURE);
    } else {

        for (int i = 0; i < 30; i++)
            inFile >> answerKey[i];

        getline(inFile, studentNames[0]);

        cout << studentNames[0];  
    }
}

输出为空。

1 个答案:

答案 0 :(得分:0)

在格式化和未格式化的I / O之间交替时,通常需要摆脱前导空格!格式化的输入(即使用operator>>()时)会跳过前导空格(您可以使用std::noskipws将其关闭但很少有用)。另一方面,未格式化的输入(例如std::getline())不会跳过前导空格。由于数字的格式化输入在流中存在非数字时停止,例如,在空格或换行符上,当调用std::getline()时,空格仍然存在:带答案的行尾是由换行符清楚地表明。 std::getline()将在此新行停止,这可能意味着没有存储任何字符,只会提取换行符。

使用前导空格的最简单方法是使用std::ws操纵器,例如:

if (std::getline(inFile >> std::ws, studentNames[0])) {
    // process the student name
}

(因为输入总是失败,我不能让自己省略检查输入成功)。

如果你想要更好的控制,例如,跳过空格直到并包括换行符,而不是之后的任何空格,你需要一个自定义方法来跳过空格。但是,要做到这两点并不是很难。