我是菜鸟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]);
}
预先感谢;
答案 0 :(得分:2)
getc
中的功能while((ch=getc(fp))!= EOF)
使用文件中的单个字符;如果9
是文件中的第一个字符,则将其简单地读取到ch
中,并且-因为您的字符集可能是ASCII码,所以-将设置ch==0x39
。
因此(1)9
将不再可用fscanf(fp, "%d", &a[ch]);
;这就是为什么您认为它“已跳过”的原因。
(2)在位置a
上对ch
进行写操作,然后超出了a
的数组范围。
答案 1 :(得分:1)
目前尚不清楚文件中有多少int
,并且当前存储它们的方式容易出错。 fgetc
返回int
(-1)或0-255的EOF
,因此ch
应该被声明为int
,然后再声明为{{1 }}是正确的,(ch=getc(fp))!= EOF
将包含0-255。
在下面的ch
中,您将再次从文件中读取文件,但将其移至索引位置fscanf(fp, "%d", &a[ch]);
处的数组中,这显然不是您的意图(当您读取带有值的字符时,它也可能会崩溃> 9.提示:“ 0”的值为48)。下面的解决方案可能看起来过于复杂,但是我已经习惯了C ++,这些事情发生在幕后,而您不必为此烦恼。也许您可以通过摘除它们来得到一些想法。
ch