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

Reading from a text file and then using the input with in the program

本文关键字:程序 输入 然后 文本 文件 读取      更新时间:2023-10-16

我想让一个程序读取一个包含20个单独字符的文本文件,这些字符位于不同的行上。然后,我想把这些字符与程序中预先编程的字母进行比较,在程序中,它会输出错误的字母和完全错误的字母。我已经成功地构建了一个程序,我可以手动输入字母,它会按照我的意愿进行,但我在代码中使用文件的知识有限。我读过关于矢量的书,但我想先保持简单,在尝试学习其他东西之前先掌握它的窍门。我试着设置了一个类似于我认为它可能应该是什么样子的代码。

我现在没有任何错误。。。如何将文本从文件中获取到程序中?我已经构建了一个几乎可以做到这一点的代码,但却不知道连接它的最后步骤。有人能帮助我朝着正确的方向前进吗。提前谢谢。在这个论坛的帮助下,我学到了比我想象的多得多的东西。

#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 examnn";
}
else
{
cout << "nYou must have at least 15 correct to pass.";
cout <<"nStudent failed the examnn";
}
//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;
}

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

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

我认为您可以直接读入字符。我已经测试了下面的代码。你可以试一试。

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

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

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

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

那么nCount将是答案编号。