Given a multiple-choice test of 10 questions with 5 possible choices (A-E). The answers are given in a text file a long with the student names. Write a C++ program that does the following:
1.Reads the key answers to an array from the input file. The key is the first line in the file
2.For each student read his/her answers and compare their answers with the key array
3.Stores each the answers of each student in an array of (chars)
4.Sends this array to a function to compute number of correct answers per student
5.Computes % of correct answers for each student
6.Stores the scores in an array of (ints)
7.Displays the list of the students along with their scores (counts and percentages)
My code is not reading the names and grades correctly. I am also unsure of how to calculate the grades of the students. Here is the beginning of my code below.
# include <cmath>
# include <iostream>
# include <iomanip>
# include <cstring>
# include <cctype>
# include <fstream>
# include <string>
usingnamespace std;
int main()
{
string x;
string temp[1] = {x};
char y = 0;
char key[10] = {y};
string a;
string name[1] = {a};
char b = 0;
char grade[10] = {b};
ifstream fin;
fin.open("fin.txt");
for( int i = 0; i < 10; ++i)
{
fin >> x;
fin >> y;
}
while (fin)
{
for( int j = 0; j < 10; ++ j)
{
fin >> a;
fin >> b;
if (grade[0] = key[0] )
;
if (grade[1] = key[1] )
;
if (grade[2] = key[2] )
;
if (grade[3] = key[3] )
;
if (grade[4] = key[4] )
;
if (grade[5] = key[5] )
;
if (grade[6] = key[6] )
;
if (grade[7] = key[7] )
;
if (grade[8] = key[8] )
;
if (grade[9] = key[9] )
;
// Need some type of function to cout their grade
}
}
system ("pause");
return 0;
}
This is great, but its too advanced for me lol. I want my work done, but I want to understand it as well. I haven't used the last three libraries that you have, so I my teacher would know it isn't my work.
Its actually pretty sloppy and overly-complicated, I just wanted to use maps since I just learned about them this semester.
You can make a struct that stores a students name and their answers as a std::string for convenience. you can treat a std::string like an array and just cycle through it comparing all the grades with the key.
If the input for the key is like:
ADCABBACABACABACAB
And a students answers is like:
ABBCCBCBCBCBCBCBB
read them in as a strings and:
1 2 3
for (int i = 0; i < str1.length(); i++)
if (str1[i] == str2[i])
correct++;
Put an extra if statement to make sure both strings are the same length though or you can end up with a seg fault. But this is a really easy way to get the job done. You could go with the smaller strings length but if they are of diff lengths something is wrong anyway.
You could validate that each students answer is the same length of the answer key right after you read them in as well.
You are reading in x then y for some reason. I'm not sure what those represent, but they are in a loop and so the first 18 lines are lost and then the next 2 are stored in x and y which are not used anywhere.
#include <iostream>
#include <fstream>
#include <string>
usingnamespace std;
int get_grade(string ans, string k)
{
int i; j = 0;
for (i = 0; i < k.length(), i++)
if (ans[i] == k[i]) j++;
return j*100/i;
}
int main()
{
ifstream fin("fin.txt");
string key, name, answer, name_set[100];
int i, grade, grade_set[100];
//First line is the key, get that
fin >> key;
for (i=0; !fin.eof(); i++)
{
//Second, read name and answer
fin >> name;
fin >> answer;
//Send to function to calc grade
grade = get_grade(answer, key);
//Then store to an array:
name_set[i] = name;
grade_set[i] = grade;
}
//Display the list of names/
for (int j = 0; j < i ; j++)
cout << name_set[i] << " " << grade_set[i] << endl;
return 0;
}
if that doesn't work for the inputs, use the cin.getline() function. You can find the references on this site.