Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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++ 仅使用“比较两个输入文件”;char";在c++;_C++_Arrays_Io_Char_Eof - Fatal编程技术网

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

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

我正在寻找一些关于作业问题的帮助,或者只是在正确的方向上轻推一下。我们不允许使用字符串。我们确实需要使用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数组中,但每次尝试时,我都没有得到正确的输出。任何帮助都将不胜感激

#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如果答案有用,请单击复选标记。