gpt4 book ai didi

c++ - 在C++中仅使用 “char”比较两个输入文件

转载 作者:行者123 更新时间:2023-12-02 09:48:04 24 4
gpt4 key购买 nike

我正在寻找有关分配问题的帮助,或者只是朝着正确的方向轻推。我们不允许使用字符串。我们确实需要使用eof。
问题:
评估多项选择检查需要两个数据文件。第一个文件
(booklet.dat)包含正确的答案。问题总数为50。A
示例文件如下:
ACBAADDBCBDDAACDBACCABDCABCCBDDABCACABABABCBDBAABD
第二个文件(answer.dat)包含学生的答案。每行有一个
学生记录,其中包含以下信息:
学生的答案(共50个答案):每个答案可以是A,B,C,D
或*(表示没有答案)。
答案之间没有空白。
学生卡
学生姓名
示例文件如下:
AACCBDBCDBCBDAAAAAABCBCBDBAABCBDDBABABCDCDAABDCBDBDA 6555 MAHMUT
CBBDBCBDBDBDBABAABABBBBBBBABBABBBBDBBBCBBDBABABDC ** 6448 SINAN
ACBADDBCBDDADAACDBACCABDCABCCBDDABCACABABABCBCBABABD 6559 CAGIL
编写一个C++程序,计算每个学生正确答案的总数
并将此信息输出到另一个名为report.dat的文件中。
对于上面给出的示例文件,输出应如下所示:
6555香肠10
6448泗南12
6550小瓶49
请在下面查看问题和我的代码。我认为最好将学生的答案放入二维数组中,但是每次尝试时,都不会获得正确的输出。任何帮助,将不胜感激。

#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;


int main(){

char answerKey[50];
char studentDetails;
char studentAnswers[3][50];
char next;
ifstream memo, answers;

memo.open("booklet.dat");
if (memo.fail()){
cout << "booklet.dat failed to open. \n";
exit(1);
}

answers.open("answer.dat");
if (memo.fail()){
cout << "answer.dat failed to open. \n";
exit(1);
}

for (int i = 0; i < 50; i++){
memo >> next;
answerKey[i] = next;
}

for (int i = 0; (next != '\n'); i++){
for (int j = 0; j < 50; j++){
answers >> next;
studentAnswers[i][j] = next;
}
}

return 0;
}

最佳答案

这是实现目标的一种方法,还有许多其他方法。

const unsigned int  MAX_ANSWERS = 50U;
char answer_key[MAX_ANSWERS] = {0};

// Read in the answer key.
std::ifstream answer_file("booklet.dat");
answer_file.read(&answer_key[0], MAX_ANSWERS);

// Process the students answers
char student_answers[MAX_ANSWERS] = {0};
std::ifstream student_file("answer.dat");
while (student_file.read(&student_answers[0], MAX_ANSWERS))
{
correct_answers = 0;
for (unsigned int i = 0; i < [MAX_ANSWERS]; ++i)
{
if (student_answers[i] == answer_key[i])
{
++correct_answers;
}
}
// Output the remainder of the line.
char c;
while (student_file >> c)
{
if (c == '\r') continue; // Don't print the CR
if (c == '\n')
{
cout << correct_answers;
cout << endl;
student_file.ignore(10000, '\n');
break;
}
cout << c;
}
}
在上面的代码中,将读取并存储答案键。
对于每个学生行,都会读入学生的答案,然后将其与答案键进行比较。内循环计算正确答案的数量。
比较答案之后,将打印数据行的其余部分,直到该行的末尾。当遇到行尾时,将打印正确的答案数量。

关于c++ - 在C++中仅使用 “char”比较两个输入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63399521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com