发布网友 发布时间:2022-04-28 13:05
共3个回答
热心网友 时间:2023-04-29 15:53
fscanf和scanf一样,只是前者一般从文件中读数据,后者从输入缓冲区读数据。在scanf中,%c只读取一个字符,%s是读取一个字符串——这时会跳过前面的' '、'\t'、'\n'等广义空格直接接收字符,一个接一个地把接收到的字符依次赋给对应的数组元素,当再次遇到' '、'\t'、'\n'等广义空格时认为字符接收完毕,就在刚被赋值的元素后增补一个'\0'以表示本次接收的字符串结束。fscanf的接收过程与此完全一样,只是是从它的第一个文件指针实参指向的文件中读取的;若把fscanf的第一个实参换成stdin(标准输入),它就和scanf一样从键盘读入数据了。热心网友 时间:2023-04-29 15:53
请问Stu[n].Group成员是什么类型的?如果是char类型用%c,如果是char *类型,则应该用%s热心网友 时间:2023-04-29 15:54
while(fscanf(fp, "空格%c%s%[^0-9]%d",&Stu[n].Group, Stu[n].number, Stu[n].name, &Stu[n].Score) != EOF)追答比如说fscanf读完一行(&Stu[n].Score)已经读进去了,这一行还会留一个换行符没有读,所以下一次fscanf会把换行符赋给&Stu[n].Group,后面就会跟着错位,加一个空格表示让fscanf跳过所有空白字符(包括空格TAB回车),所以赋给&Stu[n].Group的就是正确的字符