从文本文件中读取然后在程序中使用输入

时间:2021-07-21 21:50:19

I want to have a program read a text file with 20 single characters, that are on separate lines. I want to then have those characters compared against preprogrammed letters in the program where it will output the wrong ones and the total wrong. I have successfully constructed the program where I can manually enter the letters and it will do as I wanted, but my knowledge of using files within the code is limited. I have read about vectors but I would like to keep it simple first and get the hang of it before I try to learn something else. I have tried to set up a some code that resembles what I think it should probably look like.

我想让一个程序读取一个包含20个单字符的文本文件,这些字符在不同的行上。我想让这些字符与程序中的预编程字母进行比较,它会输出错误的字母和完全错误的字母。我已经成功构建了程序,我可以手动输入字母,它将按照我的意愿进行,但我在代码中使用文件的知识是有限的。我已经阅读了关于向量的内容,但我想先保持简单,并在我尝试学习其他内容之前先了解它。我试图设置一些类似于我认为应该看起来像的代码。

I'm not getting any errors now... How do I get the text from the file to the program? I've constructed a somewhat code that almost does it but can't figure out the last steps to connect it. Is it possible for someone to help steer me in the right direction. Thanks in advance. With the help of this forum I am learning much more than I ever thought was possible.

我现在没有收到任何错误...如何从文件中获取文本到程序?我已经构建了一些几乎可以做到的代码,但无法弄清楚连接它的最后步骤。有人可以帮助引导我朝着正确的方向前进。提前致谢。在这个论坛的帮助下,我学到的东西比我想象的要多得多。

#include <iostream>
#include <conio.h>
#include <cctype>
#include <fstream>
#include <string>

using namespace std;

void input(char[], int); //Function prototype
void checkAnswers(char[], char[], int, int);

int main()
{

const int NUM_QUESTIONS = 20;
const int MIN_CORRECT = 15;
int correctAnswers = 0;  //Accumulator for number of correct answers
int incorrectAnswers = 0;    //Accumulator for number of incorrect answers
char answers[NUM_QUESTIONS] = { 'B', 'D', 'A', 'A', 'C',
'A', 'B', 'A', 'C', 'D',
'B', 'C', 'D', 'A', 'D',
'C', 'C', 'B', 'D', 'A'};

char stu_answers[NUM_QUESTIONS];

ifstream infile;
infile.open("key.txt");

//Check for Error
if (infile.fail()) 
{
    cerr << "Error Opening File" << endl;
    exit(1);
}

string s1;
int count = 0;

// Reads file to the end
while (!infile.eof()) {
    infile >> s1 >> stu_answers[NUM_QUESTIONS]; 
    count++;
}
cout << count << " Students Answers" << endl;


checkAnswers(answers, stu_answers, NUM_QUESTIONS, MIN_CORRECT);
system ("pause");
 return 0;
}

void checkAnswers(char answers1[], char stu_answers1[], int NUM_QUESTIONS, int
MIN_CORRECT)
{
cout << "max: " << NUM_QUESTIONS;
int correctAnswers = 0; 
int incorrectAnswers = 0;
int wrongAnswers[]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int j = 0;

//Check the student's replies against the correct answers
for (int i = 0; i < NUM_QUESTIONS; i++)
{
if (answers1[i] == stu_answers1[i])
correctAnswers++;
else if (answers1[i] != stu_answers1[i])
{
incorrectAnswers++;
wrongAnswers[j] = i + 1;
j++;
}
}
//Did they pass or fail?
if (correctAnswers >= MIN_CORRECT)
{
cout << "\nYou must have at least 15 correct to pass.";
cout << "\nStudent passed the exam\n\n";
}
else
{
cout << "\nYou must have at least 15 correct to pass.";
cout <<"\nStudent failed the exam\n\n";
}

//Display a list of the questions that were incorrectly answered.
cout << "The list below shows the question numbers of the incorrectly"; 
cout << " answered questions.\n";
for (int i = 0; i < NUM_QUESTIONS; i++)
{
if (wrongAnswers[i] != 0)
cout << "Question # " << wrongAnswers[i] << " is incorrect." << endl;
}

//Display the number of correct and incorrect answers provided by the student.
cout << "\nCorrect Answers = " << correctAnswers << endl; 
cout << "Incorrect Answers = " << incorrectAnswers << endl;
}

The text file is just a notepad .txt file named "key" with the following:

文本文件只是一个名为“key”的记事本.txt文件,其中包含以下内容:

C
D
A
A
C
A
D
C
C
D
B
C
D
A
D
C
A
A
D
A

2 个解决方案

#1


1  

I think you can directly read in the characters. I've tested the code below. You may have a try.

我想你可以直接读到人物。我已经测试了下面的代码。你可以尝试一下。

while (!infile.eof() && count < NUM_QUESTIONS) {
    infile >> stu_answers[count++]; 
}

count is still the number of student answers.

count仍然是学生答案的数量。

#2


1  

You can use std::getline function to get one line at a time. It looks like this:

您可以使用std :: getline函数一次获取一行。它看起来像这样:

std::string strLine;
int nCount = 0;
while (std::getline(infile, strLine))
{
    stu_answers[nCount++] = strLine.at(0);
}

Then nCount will be the answer number.

然后nCount将是答案号码。

#1


1  

I think you can directly read in the characters. I've tested the code below. You may have a try.

我想你可以直接读到人物。我已经测试了下面的代码。你可以尝试一下。

while (!infile.eof() && count < NUM_QUESTIONS) {
    infile >> stu_answers[count++]; 
}

count is still the number of student answers.

count仍然是学生答案的数量。

#2


1  

You can use std::getline function to get one line at a time. It looks like this:

您可以使用std :: getline函数一次获取一行。它看起来像这样:

std::string strLine;
int nCount = 0;
while (std::getline(infile, strLine))
{
    stu_answers[nCount++] = strLine.at(0);
}

Then nCount will be the answer number.

然后nCount将是答案号码。