将字符行分别读取为数组并比较答案 C++

Reading lines of characters separately into arrays and comparing answers C++

提问人:Juan Vargas-Elvira 提问时间:5/10/2023 更新时间:5/10/2023 访问量:42

问:

我做过一个项目,我只阅读 1 行 20 个字符,并将这些字符与答案键进行比较,并根据他们在文件中输入的内容输出多少是正确的,多少是错误的。我下面的代码显示了 .dat 文件中只有一行 20 个字符的外观。我想像这样做同样的事情,但有 7 行,每行 20 个字符。我不确定该写什么来分隔 7 行并将它们分别与正确答案进行比较。

    char letter;
    int index = 0;

    while (inData >> letter) // takes the character from each array from the file
    {
        studentAns[index] = letter;
        index++; // takes the 20 characters from the file
    }

我试图在循环外部和内部添加更多变量,但输出不显示任何内容。比如这样。

# Correct | # Incorrect
-----------------------
    0     |    20
-----------------------

You failed!

char letter;
char letter2;
int index = 0;
int index2 = 0;

while (inData >> letter) // takes the character from each array from the file
{
    studentAns[index] = letter;
    index++; // takes the 20 characters from the file
    
    while (inData >> letter2) 
    {
        studentAns2[index2] = letter2;
        index2++; 
    }
}

    
C++ 数组 ifstream

评论

0赞 PaulMcKenzie 5/10/2023
或?那么你就不会只用更改的变量的名称来编写相同的代码 7 次。char studentAns[7][20];
0赞 Juan Vargas-Elvira 5/10/2023
在 while 循环中还是在程序的本地范围内?
0赞 PaulMcKenzie 5/10/2023
studentAns -- studentAns2-- 那么你使用这种布局的目标是什么?会是 、 、 等吗?看到模式了吗?声明一个由 7 名学生组成的数组,其中包含 20 个问题,外部索引是当前学生,内部索引是当前问题。如果这不是你的目标,那么你应该在问题中澄清你想要实现的目标。studentAns3studentAns4studentAns5
0赞 PaulMcKenzie 5/10/2023
另外,需要明确的是,您是否有 7 名学生,每名学生有 20 个问题?
0赞 Juan Vargas-Elvira 5/10/2023
是的,7 名学生,每人 20 个问题

答:

1赞 PaulMcKenzie 5/10/2023 #1

如果你能保证 7 名学生每人有 20 个问题,那么你可以使用二维数组来执行输入:char

char student[7][20];

while (int studentIndex = 0; studentIndex < 7; ++studentIndex)
{
    for ( int letterIndex = 0; letterIndex < 20; ++letterIndex)
        std::cin >> studentAns[studentIndex][letterIndex];
}

然后是第一个学生的第一个问题,第一个学生的第二个问题,第二个学生的第四个问题,依此类推。student[0][0]student[0][1]student[1][3]

0赞 ritz092 5/10/2023 #2

对于你提出的问题,我会给你一个更笼统的答案。假设您有一个包含“n”行的文件,并且每行的长度是可变的。 然后我们将借助 vector 和 getline() 函数来获得答案。

#include <iostream>
#include <fstream>
using namespace std;

int number_of_lines = 0;

int main(){
    string line;
    vector<string> str;
    ifstream myfile("example.dat");
    if(myfile.is_open()){
        while(myfile.peek() != EOF){
            getline(myfile,line);
            str.push_back(line);
            number_of_lines++;
        }
        myfile.close();
    }
    for(int i=0; i<number_of_lines; i++)
    {
        cout<<str[i]<<endl;
    }
    return 0;
}