请问,为何以下程序会计算出错。

fort2000 2005-06-07 02:04:45
#include <stdio.h>
#define N 100000
main()
{
FILE *fp ;
unsigned long i ;
fp=fopen("a.txt","wb") ;
for (i=0;i<N;i++)
{
fprintf(fp," %6d",i) ;
}
fclose(fp) ;
}
...全文
114 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
clear117 2005-06-08
  • 打赏
  • 举报
回复
同意楼上的
定义时是无符号的长整型,但输出到文件时却是整型,出错也难免。
terman 2005-06-08
  • 打赏
  • 举报
回复
#include <stdio.h>
#define N 100000
main()
{
FILE *fp ;
unsigned long i ;
~~~~~~~~~~~~~~~~~~
fp=fopen("a.txt","wb") ;
for (i=0;i<N;i++)
{
fprintf(fp," %6d",i) ;
~~~~~
}
fclose(fp) ;
}

你把一个无符号长整型当作带符号标准整型打印,如果在vc下面,long和int长度一样,100000没超出它们的表示范围,所以没问题,但是如果在16位编译器下面,int型只有16位,long型32位,就会出问题了。应该是fprintf(fp,"%6uld",i);
hanxingwuqing 2005-06-07
  • 打赏
  • 举报
回复
我试了半天,也没搞定,关注中……
bob_thb 2005-06-07
  • 打赏
  • 举报
回复
N定义的不对吧!
bjzhtt 2005-06-07
  • 打赏
  • 举报
回复
呵呵,把100000改成10000000000你们就会发现一件巨恐怖的事。
没见过几百兆的txt文件吧:)
haitingr 2005-06-07
  • 打赏
  • 举报
回复
这个程序本质上就是错误的

首先不符合c99标准

在fprintf中"%6d"对吗,如果是在不同的平台下int为8位的话,就出现了溢出现象,怎么说没有问题呢?
yezhongxing_sina 2005-06-07
  • 打赏
  • 举报
回复
fp=fopen("a.txt","wb") ;
没有A。TXT???
elc 2005-06-07
  • 打赏
  • 举报
回复
bullshit
daydream765 2005-06-07
  • 打赏
  • 举报
回复
这样不好,先用filelength取得文件长度,

用文件长度代替你的N,这是比较好的做法。
fort2000 2005-06-07
  • 打赏
  • 举报
回复
运行输出的数值有问题。
qfeng_zhao 2005-06-07
  • 打赏
  • 举报
回复
是没问题,vc6.0下调试过
foochow 2005-06-07
  • 打赏
  • 举报
回复
我在VC6.0下正常哦,楼主编译器的问题吧
「已注销」 2005-06-07
  • 打赏
  • 举报
回复
的确没有任何问题。。
tongyongmc 2005-06-07
  • 打赏
  • 举报
回复
运行良好,没有问题啊

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧