任务是成为一名考试评分员。该文件的第一行是所有答案 并且下一行在学生姓名(最后,第一)之间交替,并且他们是以下行的答案。我能够传递测试密钥答案,但是当我尝试使用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];
}
}
输出为空。
答案 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
}
(因为输入总是失败,我不能让自己省略检查输入成功)。
如果你想要更好的控制,例如,跳过空格直到并包括换行符,而不是之后的任何空格,你需要一个自定义方法来跳过空格。但是,要做到这两点并不是很难。