2010-08-08 15 views
0

J'ai un programme de devoirs sur lequel j'ai besoin d'aide. J'ai besoin de comparer un tableau contenant la clé de réponse d'un test à un tableau contenant les réponses des étudiants. Le problème que je rencontre est que je dois prendre en compte les réponses vides. Je n'arrive pas à trouver un code qui compare les tableaux, puis affiche le score. Le test est noté 2 points pour une réponse correcte, moins 1 point pour une réponse incorrecte et zéro point pour une réponse vide.Comparer des éléments de tableau en C++

Ceci est un exemple de l'entrée:

TTFTFTTTFTFTFFTTFTTF
ABC54102 T FTFTFTTTFTTFTTF TF

La première ligne est la clé, la deuxième ligne est la première ligne de données d'étudiant.

C'est le code que j'ai:

#include <cmath> 
#include <fstream> 
#include <cstring> 
#include <string> 
#include <iostream> 

using namespace std; 

int checkAnswers(char key[], char answers[]); 
void displayGrade(int score); 

int main() 
{ 
    ifstream inFile; 

    int score = 0; 
    char key[21]; 
    string studentID; 
    char answers[21]; 
    int studentCount; 

    inFile.open("Ch9_Ex6Data.txt"); //opens input file 
    if (!inFile) //sets condition for if input file does not exist 
    { 
     cout << "Unable to locate file." << endl; //informs user that input file is missing 
     cout << "Program terminating." << endl; //informs user that program is terminating 
     return 1; //terminates program with error 
    } 

    inFile.getline(key, 21); 

    cout << "Processing Data..." << endl << endl; 
    cout << "Key: " << key << endl << endl; 

    while (inFile >> studentID) 
    { 
     cout << studentID; 
     inFile.getline(answers, 22); 
     cout << answers << " "; 
     score = checkAnswers(key, answers); //calls checkAnswer function and sets result equal to score 
     displayGrade(score); 

    } 

    return 0; 
} 

//User-defined Function 1 
int checkAnswers(char key[], char answers[]) 
{ 
     //Function Variables 
    int i, length; //declares i variable 
    int correct = 0, incorrect = 0, blank = 0, score = 0; //declares and initializes correct, incorrect, blank, and score variables 

    answers >> length; 
    for (i = 0; i < 22; i++) //initiates conditions for for loop 
    { 
     if (answers[i] == ' ') //initiates if condition 
     { 
      i++; 
     } 
     else if (key[i] == answers[i]) //initiates if condition 
     { 
      correct++; //sets condition for correct answers 
     } 

     else if (key[i] != answers[i]) //initiates if condition 
     { 
      incorrect++; //sets condition for incorrect answers 
     } 

     score = 40 - incorrect; //calculates score 
    } 

    cout << score << " "; //output student score 
    return score; //pass score 
} 

Modifier des éclaircissements: j'ai besoin du code pour afficher comme ceci:

clé: TTFTFTTTFTFTFFTTFTTF
ABC54102 T FTFTFTTTFTTFTTF TF 27 D
ADE62366 TTFTFTTTFTFTFFTTF__ 34 B (avec le _ étant des espaces)

La façon dont il affiche est comme ceci:

clé: TTFTFTTTFTFTFFTTFTTF
ABC54102 T FTFTFTTTFTTFTTF TF 27 D
ADE62366 TTFTFTTTFTFTFFTTF 34 B

Ce qui, je pense, est un problème d'alignement, depuis que j'ai tweeté le code maintenant.

+1

Quoi, si quelque chose est votre question? Qu'est-ce qui fonctionne, ne fonctionne pas, etc? – deinst

+1

Veuillez indiquer un problème ou une question. Si votre code ne compilera pas - donnez le message d'erreur que vous obtenez. Si elle compile mais ne fonctionne pas correctement, donnez votre comportement attendu et le comportement réel. –

+1

En outre, vos commentaires devraient dire pourquoi quelque chose se passe. Le lecteur peut voir qu'une déclaration comme 'int i;' déclare 'i', il/elle ne sait pas ce que' i' représente. De même avec les instructions if, pourquoi faites-vous les comparaisons? – deinst

Répondre

2

Quelques remarques:

char answers[21]; 
    inFile.getline(answers, 22); 

Vous ne pouvez pas lire 22 caractères dans un tableau de 21 taille.

answers >> length; 

Cela n'a aucun sens. Pourquoi bouclez-vous l'index 21 si vous n'avez que 20 réponses?

score = 40 - incorrect; //calculates score 

Ceci peut être placé après la boucle, mais pourquoi ne calcule pas le score selon vos règles (2 * correct-incorrect)?

Questions connexes