C语言详解 之 错误率的计算

时间:2021-11-19 04:04:32

C语言详解 之 错误率的计算

 

C语言详解 之 错误率的计算

 

 

#include <stdio.h>

#define  input "examdat.txt"
#define  output  "report.txt"
int fgetAnswers(int*pos, char res[], FILE*inp);
int main()
{
  FILE*inp,*outp;
 inp = fopen(input,"r");
 outp = fopen(output,"w");
 int n;
 char ans[100];
 int ID;
 char result[100];
 int missed[100];
 int status = fgetAnswers(&n, ans, inp);
 for(int m=1;m<n;m++)
  missed[m]=0;

 printf("%s/n",ans);

 printf("ID      score(%%)/n");

 while(EOF != status)
 {
   status = fgetAnswers(&ID, result, inp);
   double right = 0.0;
   for(int i=1;i<=n;i++)
   {
 if(result[i] == ans[i])
 {
 right++;
 }
 else
 {
 missed[i]++;
 }
   }

   fprintf(outp,"%d     %d/n",ID,(int)(right/n*100));
   printf("%d     %d/n",ID,(int)(right/n*100));
 }//while

  printf("/n number:");
  for(int j=1;j<n;j++)
    printf("/t%d  ",j);
  printf("/n missed by:");
  for(j=1;j<n;j++)
    printf("/t%d  ",missed[j]);

   fclose(inp);
   fclose(outp);
  return 0;
}


int fgetAnswers(int*pos, char res[],FILE*inp)
{
    fscanf(inp, "%d", pos);
    char ch;
    int i=0;
    fscanf(inp, "%c",&ch);
    while('/n' != ch)
    {
      res[i]=ch;
      i++;
      fscanf(inp, "%c",&ch);
     }
 int status = fscanf(inp, "%c",&ch);
 res[i]='/0';
    return status;   
}

 

 

这段程序我在调试的时候又花了时间,主要是fgetAnswers()在返回读取状态时对于status的改变位置不对!

 

切记 其scanf()的用法,主要是返回状态的妙用!!!