C++ 如何在C+中读取文件中的交替文本行以分离数组+;?
作业是做一个考试评分员。文件的第一行是所有答案 接下来的几行是学生的名字(最后一行,第一行)和下一行的答案。我可以传入测试键答案,但当我尝试使用getline()函数时,它不会将值存储到数组的第一个索引中,而cin.ignore()只会导致程序冻结。我该怎么办C++ 如何在C+中读取文件中的交替文本行以分离数组+;?,c++,arrays,file,input,eol,C++,Arrays,File,Input,Eol,作业是做一个考试评分员。文件的第一行是所有答案 接下来的几行是学生的名字(最后一行,第一行)和下一行的答案。我可以传入测试键答案,但当我尝试使用getline()函数时,它不会将值存储到数组的第一个索引中,而cin.ignore()只会导致程序冻结。我该怎么办 #include <iostream> #include <fstream> #include <string> using namespace std; typedef char answerKe
#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];
}
}
#包括
#包括
#包括
使用名称空间std;
typedef char answerKey[30];
typedef字符串studentNames[25];
int main()
{
河道充填;
infle.open(“xfile.txt”);
如果(!infle)
{
不能回答[i];
getline(infle,studentNames[0]);
cout在格式化和非格式化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
}
(由于输入总是会失败,我不能忽略对成功输入的检查)
如果您想要更好的控制,例如,跳过空格直到并包括一个换行符,但之后不包括任何空格,您需要一种自定义的方法来跳过空格。不过,这也不是很难做到。尝试对infle
进行操作,而不是cin
cin
是stdin
即:您不能使用的控制台在程序运行时输入。cin.ignore()。