Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C+中读取文件中的交替文本行以分离数组+;?_C++_Arrays_File_Input_Eol - Fatal编程技术网

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

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

作业是做一个考试评分员。文件的第一行是所有答案 接下来的几行是学生的名字(最后一行,第一行)和下一行的答案。我可以传入测试键答案,但当我尝试使用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];  
    }
}
#包括
#包括
#包括
使用名称空间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()。