我正在制作一个程序,它将采用文本文件(格式: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
答案 0 :(得分:1)
尝试将空字符放在每个id的末尾
例如:
id[9] = '\0';