2014-10-30 52 views
0

我寫了這個程序的類。我有一個問題,顯示什麼在arry 我所得到的是符號而不是一個字符,即使我從教授提供的文件中填充字符。請幫我弄清楚這裏有什麼問題,我明天需要它填寫Arry函數不存儲字符和輸出符號

// This program grades multiple choice exams1. Each exam consists of 20 questions. 
//Each question has one of four possible answers: A, B, C, or D. 

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

const int maxsize = 20; 

int fillArry (FILE *fi,char arry[],const int maxsize); 

double gradeExam (char arry[], char studarry[],const int maxsize); 

void desplayResults (double right); 

int main() 
{ 
    char arry[maxsize]; 
    char studarry[maxsize]; 
    int num,num1,i,right; 
    FILE *fi,*sd; 

    fi = fopen ("CorrectAnswers.txt","r"); 
    if (fi == NULL) 
    { 
     printf("Error opening input file.\n\n"); 
     exit(1); 
    } 

    sd = fopen ("StudentAnswers.txt", "r"); 
    if (sd == NULL) 
    { 
     printf("Error opening input file.\n\n"); 
     exit(1); 
    } 

    num = fillArry (fi,arry,maxsize); 
    num1 = fillArry (sd,studarry,maxsize); 
    for (i=0;i<maxsize;i++) 
    { 
    printf("%c\n",arry); 
    } 

    for (i=0;i<maxsize;i++) 
    { 
    printf("%c\n",studarry); 
    } 

    right = gradeExam (arry, studarry ,maxsize); 
    printf("you got %i right\n", right); 
    desplayResults (right); 
    return 0; 
} 

int fillArry (FILE *fi,char arry[],const int maxsize) 
{ 
    int u = 0; 

    while((fscanf(fi,"%c",&arry)==1)&& u< maxsize) 

    { 
     u++;  
    } 


    return u; 
} 

double gradeExam (char arry[], char studarry[],const int maxsize) 
{ 
    int i, right=0, wrong=0; 

    for (i=1;i<=maxsize;i++) 
    { 
     if (arry[i]==studarry[i]) 
      right++; 
     else 
     {  
      printf ("question number %i :%c is wrong, the correct answer is %c\n\n",i,studarry,arry); 
      wrong++; 
     } 

    } 

    printf("\nnumber of wrong answers: %i\n",wrong); 
    return right; 
} 

void desplayResults (double right) 
{ 
    double res; 
    res = (right/20)*100; 
    printf("You got %s %.2lf on the exam\n","%",res); 
    if (res<70) 
    printf ("You failed the exam\n"); 
    else 
    printf ("You passed the exam\n"); 
} 
+0

爲什麼你不關閉打開的文件? – 2014-10-30 05:56:48

+0

你能提供輸入文件的例子嗎? – Marcin 2014-10-30 05:58:15

回答

0

問題在於你的fscanf語句。嘗試一下。

的fscanf(FI, 「%S」,ARRY)

此外,用於顯示數組的內容,你必須做這樣的:

for(i=0; i<maxsize; i++) 
{ 
    printf("%c",arry[i]); 
} 

EDIT1:我已經驗證了同樣的事情在我的結尾,它正在工作。請檢查文件CorrectAnswers.txt的內容。

EDIT2:我得到了問題。這是在你的打印聲明:

printf(「問題編號%i:%c是錯誤的,正確的答案是%c \ n \ n」,i,studarry,arry);

請其修正爲:

的printf( 「問題編號%I:%C是錯誤的,正確的答案是%C \ n \ n」,我,studarry [I],ARRY [1]) ;

+0

所有的計算都是正確的。然而它仍然輸出符號而不是文件中的字符,這就是文件的組織方式。 – 2014-10-30 06:23:10

+0

一個 d 乙 Ç 一個 一個 d 乙 d Ç 一個 d 乙 一個 ç Ç d 乙 Ç 一個 – 2014-10-30 06:23:47

+0

謝謝你,這是真正有用的,現在它是我不得不改變爲什麼數據是在文件中組織的。我把它們全部放在一行中,沒有空格,而不是每行一行。 – 2014-10-30 07:17:22