2015-12-03 3 views
0

У меня есть назначение, которое имеет txt-файл. Я должен сканировать первую строку и сравнить ее с другой линиейЧтение текстового файла и сравнение каждой строки

 
(
BACCDEABCEEDCDABBAED 
6734 BXCCDAABCEEDCDACBAED 
7843 BADCXAABCEXXCDABBAED 
2223 BCBAEACCDAEDCDABBAEA 
2324 BACXDEABCEEDCDAABAED 
3474 BACCDEABCEEDCDABBAED 
3434 XADCDAABCEEDCDABBAED 
6374 XXXXXCXXXXXXXXXXXAED 
3332 BADCDEABCEEDCDADBCEX 
3454 BACCXEABCEEDCXABBAED 
0 
) 

Как бы я отделите первую для цифр и сравнить с [20] (Correct_ ответов) другие письма с первой линией 20?

Это то, что я до сих пор .........

#include <stdio.h> 
#include <stdlib.h> 

int main(){ 
    char answer[20]; 

    char studentAnswer[20]; 

    int studentId[4]; 

    int x; 

    int correct=0,wrong=0,notAttempted=0; 

    FILE * in = fopen("/Users/MarkB/Desktop/ASSIGNMENT3/exam.txt", "r"); 
    FILE * out = fopen("/Users/MarkB/Desktop/ASSIGNMENT3/examRsults.txt", "w"); 

    fscanf(in,"%d",studentId); 
    fscanf(in,"%s",answer); 
    fscanf(in,"%s",studentAnswer); 
    while (studentId !=0){ 
     for (x=0; x<20;x=x+1){ 
      if(answer[x]==studentAnswer[x]){ 
       correct=correct + 1; 
      } 
      if(answer[x]!=studentAnswer[x] && studentAnswer[x]!='X'){ 
       wrong=wrong + 1; 
      } 
      if(studentAnswer[x]=='X'){ 
       notAttempted=notAttempted + 1; 
      } 
     } 
    } 

    fprintf(out,"--------Student Exam results------\n"); 

    fprintf (out,"%d",studentId[0]); 



    fprintf (out,"Questions Correct: %d \n",correct); 
    fprintf (out,"Questions Wrong: %d \n",wrong); 
    fprintf (out,"Questions not attempted: %d \n",notAttempted); 

    system("pause"); 
    return 0; 
} 
+2

Нет «это то, что я получил до сих пор». У вас есть ** конкретный вопрос? Если нет, исследуйте немного. Это **, что ** трудно? – Downvoter

+0

Первая строка вашего входного файла (игнорирование символа '' ('') является алфавитной строкой. Первое заявление для чтения:' fscanf (in, "% d", studentId); 'который запрашивает' int' и так что не прочитайте первый элемент, прежде чем идти дальше, нужно проверить возвращаемое значение из 'fscanf()' ** каждый раз **, которое в случае, если вы никогда не удосужились прочитать man-страницу, является количество полей успешно конвертировано –

+0

Надежно блокирует код while (studentId! = 0) ', эта переменная' studentId' не изменяется. В любом случае, почему вы используете 'int studentId [4];' как если бы он были «int studentId;»? –

ответ

1

Ваш код

fscanf(in,"%s",studentAnswer); 

не принимая во внимание идентификатор, прежде чем ответов студентов. Если у входного файла действительно есть '(' и ')', вы также должны учитывать, что пропустили их. Вы также должны каким-то образом сравнить идентификатор, указанный в строке, в которой вы находитесь. Вы должны сравнить идентификатор, который вы получили в цикле while, пока не сможете прочитать ответы студентов.

Смежные вопросы