答案 0 :(得分:1)
您的输入文件显然有一个标题:
Name MatricNo A B
在第一次迭代中,fscanf
成功读取字符串变量name
和matricno
;然而,阅读数字失败,因为它看到A
。因此,它打印name
和matricno
,为值Name
和MaricNo
,并打印未初始化的整数A和B的值,因此是垃圾。
在第二次迭代中,fscanf
继续它停止的地方并读取字符串A
和B
(标题的最后一部分),但再次读取整数失败。所以它现在打印A
和B
以及变量A和B的酉值。
现在所有内容都会再次同步,并将其余内容打印出来。
所以你应该检查fscanf
的返回值。此外,while (feof))
错误,因为它告诉您读取操作遇到EOF 。因此,它不会告诉您文件中是否还有某些内容,您认为feof
会这样做。最后,将数组传递给函数会导致编译器将该数组的地址赋给函数,因此不要在调用fscanf之前将&
放在name
和matricno
之前(编译器显然忽略了它,但可能会发出警告)。