C语言关于文件操作的问题:下面是代码:

#include <stdio.h>
#include <conio.h>

int main()
{
int i;
FILE *pfile=fopen("test.txt","a++");
if(!pfile)
printf("I can't open the file:");
while(!feof(pfile))
{
fscanf(pfile,"%d",&i);
printf("%d",i);
}
fclose(pfile);
getch();
//问题:我的test.txt中的文本是123456789123456,但是输出时会输出负数,如果test.txt中是123456就可以正常输出,我不明白为什么
}
请大家给我讲讲,非常感谢

fscanf(pfile,"%d",&i);
使用fscanf对文件进行读取时,如果用%d进行格式,就是要读取整型,并把值赋值给变量i
这同scanf一样,遇到空白字符或者回车时停止读入,这样,第一次读入就是123456789123456
这远远超过Int定义的最大值(32位机,2^31-1),所以将进行截取,会出现负数,而
123456在其范围,能正确读入。
可以改成fscanf(pfile,"%1d",&i);用1个宽度进行约束,这样一次只读取一个字符。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-14
int i; 整型 int的取值范围?123456789123456太大了吧
第2个回答  2011-05-14
把int 换成char %d换成%c
变成负数是因为普通32位系统 int 四个字节 所以123456就是 0x0001e240 结果正常
而123456789123456 超过了int的读取范围 所以产生了负数
第3个回答  2011-05-14
应该定义成字符数组,int 的范围是-32768~32767,你的数据超过了。
相似回答