C编程打印文件的字符数组

时间:2014-03-09 20:49:32

标签: c file-io char

我正在制作一个程序,它将采用文本文件(格式:9位数字,名字,姓氏,等级),如...

123123123 Joe Brown 75 80 90 70 
321321321 William Smith 100 90 95 80
312312312 Rob Black 70 80 85 95

并且输出仅显示ID#,然后是成绩的平均值和与其平均值对应的字母等级。我一直在努力找到我的代码有什么问题。出于某种原因,每个ID中的最后一个字符是" @"符号,我无法弄清楚为什么。

输出:

12312312@ 79 C
32132132@ 91 A
31231231@ 83 B

这是我的文件,请原谅我刚刚开始的代码:

#include <stdio.h>
main (){
 //characters we need
 char c;
 char id[10];
 char fname[20];
 char lname[20];
 char num[4];
 int grades[20];
 //counters
 int i = 0;
 int j = 0;
 int k = 0;
 int m = 0;
 int p = 0;
 int numNums = 0;
 //for whole file
 while(1) {//filewhile
  //for each line
  while(1) {//linewhile
   i = 0;
   j = 0;
   k = 0;
   m = 0;
   numNums = 0;
   //reads id
   while((c=getchar()) != ' ' && c!=10 && c!=EOF) id[i++]=c;
   //reads fname
   while((c=getchar()) != ' ' && c!=10 && c!=EOF) fname[j++]=c;
   //reads lname
   while((c=getchar()) != ' ' && c!=10 && c!=EOF) lname[k++]=c;
   //reads each grade
    while(1){//numwhile
     p=0;
     while((c=getchar()) != ' ' && c != 10 && c != EOF) {
      num[p++]=c;
     }
     //terminates num array
     num[p]=0;
     //converts num into ints and puts in grades array
     grades[m++]=atoi(num);
     numNums++;
     if(c==10 || c == EOF) break;
    }//numwhile
   //stuff to average the persons grade
   int n = 0;
   int total=0;
   for(n=0; n<numNums; n++){
   total += grades[n];
   }
   int average = total / numNums;
   if(average>=90){printf("%10s %d A", id, average); printf("\n");}
   else if(average>=80){printf("%10s %d B", id, average); printf("\n");}
   else if(average>=70){printf("%10s %d C", id, average); printf("\n");}
   else if(average>=60){printf("%10s %d D", id, average); printf("\n");}
   break;
  }//linewhile
  if(c==EOF) break;
 }//filewhile
}//main

1 个答案:

答案 0 :(得分:1)

尝试将空字符放在每个id的末尾

例如:

id[9] = '\0';