首页 > 解决方案 > 为什么我的 printf() 不打印文本文件中的第一个字符?

问题描述

我是一个菜鸟 C 程序员。我无法读取文本文件的所有字符。我的 file.txt 有数字:9,2,3,4,5,6 但是当我运行下面编写的代码时,它只是跳过 9 并打印其余的数字。但是,当我在 9 之前放置一个空格时,它运行得很好。我如何解决它?为什么会这样?

FILE* fp;
fp = fopen("file.txt", "r");
int a[10];
char ch;

while((ch=getc(fp))!= EOF)
{
    fscanf(fp, "%d", &a[ch]);
    printf("%d ", a[ch]);
}

提前致谢;

标签: cfileerror-handlingfile-handling

解决方案


函数getcinwhile((ch=getc(fp))!= EOF)使用文件中的单个字符;如果9是文件中的第一个字符,它将被简单地读入ch并且 - 因为您的字符集可能是 ASCII - 将设置ch==0x39.

因此 (1)9将不再适用于fscanf(fp, "%d", &a[ch]);; 这就是为什么你认为它被“跳过”。

(2) 写入aat 位置ch然后超出 的数组边界a


推荐阅读