C++ 仅使用“比较两个输入文件”;char";在c++;
我正在寻找一些关于作业问题的帮助,或者只是在正确的方向上轻推一下。我们不允许使用字符串。我们确实需要使用eof 问题: 评估多项选择题考试需要两个数据文件。第一个文件 (小册子.dat)包含正确答案。问题总数为50个。A. 示例文件如下所示: acbaadbcbddaacdbacadcabbccbddabcabcabbdabcababababbabd 第二个文件(answer.dat)包含学生的答案。每行有一个 包含以下信息的学生记录: 学生的答案(共50个答案):每个答案可以是a、B、C、D 或*(表示没有答案) 答案之间没有空格。 学生证 学名 下面给出了一个示例文件: AACCBDBCDBCBDAABDBCBDBBAABDBCBDBDBCBCBDA 6555 MAHMUT CBBDBCBDBDBBBBBBBBBBBBBBBBBBBBBBBBBBBDC**6448西南 ACBADBCBDDACDBACABDCABDCABDCBDDABCABABABABCBABD 6559 CAGIL 编写一个C++程序,计算每个学生正确答案的总数。 并将此信息输出到另一个名为report.dat的文件 对于上面给出的示例文件,输出应如下所示: 6555 MAHMUT 10 6448思南12 6550卡吉尔49 请参阅下面的问题和我的代码。我认为最好将学生的答案放入2d数组中,但每次尝试时,我都没有得到正确的输出。任何帮助都将不胜感激C++ 仅使用“比较两个输入文件”;char";在c++;,c++,arrays,io,char,eof,C++,Arrays,Io,Char,Eof,我正在寻找一些关于作业问题的帮助,或者只是在正确的方向上轻推一下。我们不允许使用字符串。我们确实需要使用eof 问题: 评估多项选择题考试需要两个数据文件。第一个文件 (小册子.dat)包含正确答案。问题总数为50个。A. 示例文件如下所示: acbaadbcbddaacdbacadcabbccbddabcabcabbdabcababababbabd 第二个文件(answer.dat)包含学生的答案。每行有一个 包含以下信息的学生记录: 学生的答案(共50个答案):每个答案可以是a、B、C、D
#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;
}
#包括
#包括
#包括
使用名称空间std;
int main(){
char-answerKey[50];
char studentDetails;
char学生回答[3][50];
下一步;
如果流备忘录,答案;
备忘录打开(“小册子日期”);
if(memo.fail()){
下一步;
answerKey[i]=下一步;
}
for(int i=0;(next!='\n');i++){
对于(int j=0;j<50;j++){
答案>>下一步;
学生回答[i][j]=下一个;
}
}
返回0;
}
我不太明白为什么要将答案存储在数组中。你能不能不这样做:
while( fileHasNotEnded )
{
answers >> answerOfStudent;
memo >> correctAnswer;
if( AnswerOfStudent == correctAnswer )
correctAnswerCounter++;
}
我不太明白为什么要将答案存储在数组中。你能不能不这样做:
while( fileHasNotEnded )
{
answers >> answerOfStudent;
memo >> correctAnswer;
if( AnswerOfStudent == correctAnswer )
correctAnswerCounter++;
}
这是实现目标的一种方法,还有很多其他方法
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;
}
}
const unsigned int MAX_ANSWERS=50U;
char answer_key[MAX_ANSWERS]={0};
//读入答案键。
标准::ifstream应答文件(“小册子.dat”);
应答文件。读取(应答键[0],最大应答次数(&A));
//处理学生的答案
char student_answers[MAX_answers]={0};
std::ifstream学生_文件(“answer.dat”);
while(student_file.read(&student_answers[0],MAX_answers))
{
正确答案=0;
for(无符号整数i=0;i<[MAX_ANSWERS];++i)
{
如果(学生回答[i]==回答[i])
{
++正确答案;
}
}
//输出行的剩余部分。
字符c;
while(学生档案>>c)
{
如果(c=='\r')继续;//不打印CR
如果(c=='\n')
{
这是实现目标的一种方法,还有很多其他方法
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;
}
}
const unsigned int MAX_ANSWERS=50U;
char answer_key[MAX_ANSWERS]={0};
//读入答案键。
标准::ifstream应答文件(“小册子.dat”);
应答文件。读取(应答键[0],最大应答次数(&A));
//处理学生的答案
char student_answers[MAX_answers]={0};
std::ifstream学生_文件(“answer.dat”);
while(student_file.read(&student_answers[0],MAX_answers))
{
正确答案=0;
for(无符号整数i=0;i<[MAX_ANSWERS];++i)
{
如果(学生回答[i]==回答[i])
{
++正确答案;
}
}
//输出行的剩余部分。
字符c;
while(学生档案>>c)
{
如果(c=='\r')继续;//不打印CR
如果(c=='\n')
{
你的意思是c字符串或字符数组,而不是使用正确的std::string和std::vector。嗨,drescherjm,请原谅我的无知,我们还没有学习c字符串。我没有得到正确的输出。如果有任何帮助,我们将不胜感激。你可能需要从调试器开始,逐行执行代码,查看变量和到的流查看代码执行偏离预期的地方。“任何其他预定义函数”->那么你也不能读取任何文件。但说真的,你被要求只使用“char”,你可以使用库函数来读取文件,读取char
值并比较它们。我似乎只在为2d数组使用嵌套for循环查找每个特定行时遇到问题。你是指c字符串或字符数组,而不是使用正确的std::string和std::vector.Hi drescherjm,请原谅我的无知,我们还没有学习c-string。我没有得到正确的输出。任何帮助都将不胜感激。您可能需要从调试器开始,逐行执行代码,查看变量和流,以查看代码执行与预期的偏差。“任何其他预定义函数"->那么你也不能读取任何文件。但说真的,你被要求只使用“char”,你可以使用库函数来读取文件,读取char
值并比较它们。我似乎只在为2d数组使用嵌套for循环查找每一行时遇到问题。这对学生答案文件的每一行都有效吗@韦伯不,这段代码只是伪代码。我只是想表达我不使用2d数组的想法。谢谢你,艾森基尔。学生答案文件的每一行都需要这项工作吗?@韦伯不,这段代码只是伪代码。我只是想表达我不使用2d数组的想法。非常感谢艾森基尔谢谢你Thomas@Webbo如果答案是是有用的,请点击复选标记。非常感谢Thomas@Webbo如果答案有用,请单击复选标记。