为什么这个C程序会无休止循环?

HDLWL 2006-05-07 02:08:30
#include "stdio.h"
main()
{
char string[]="china";
char i=0;
for(i=0;i<=127;i++)
printf("%s %d\n",string,i);
getch();
}
为什么i值增加到127后,又从-128起开始无休止循环,i=127后,程序还会执行i++吗?
...全文
401 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxhnag820 2006-05-08
  • 打赏
  • 举报
回复
还是改为int,不用char 就可以了!
chelator 2006-05-08
  • 打赏
  • 举报
回复
学习!
王建宁 2006-05-08
  • 打赏
  • 举报
回复
路过学习!
xun56789 2006-05-08
  • 打赏
  • 举报
回复
我说的是char!
xun56789 2006-05-08
  • 打赏
  • 举报
回复
127+1=-128
tdtdtdtdtd123 2006-05-07
  • 打赏
  • 举报
回复
char 的范围是-128-0-127,到127时已经表示为二进制码0111 1111,其中第一个0为符号位,这时再加1就变成了1000 0000,这个数值符号位发生了改变说明已经发生了溢出,这是个负值,自然比127要小,所以循环就继续了。不知道说的对不对,还请给位大哥指教。
dui de
hf1414 2006-05-07
  • 打赏
  • 举报
回复
char 的范围是-128-0-127,到127时已经表示为二进制码0111 1111,其中第一个0为符号位,这时再加1就变成了1000 0000,这个数值符号位发生了改变说明已经发生了溢出,这是个负值,自然比127要小,所以循环就继续了。不知道说的对不对,还请给位大哥指教。
bombwang 2006-05-07
  • 打赏
  • 举报
回复
应该是int吧
sunzhiwei8 2006-05-07
  • 打赏
  • 举报
回复
对,改成int i。
erwa 2006-05-07
  • 打赏
  • 举报
回复
因为在你的那个系统char是一个字节char表示的范围是-127到127
也就是说char i=127;
i+1就等于-127拉!!(不可能是128去拉吧~嘿嘿 )
int也是这样的只不过它的范围更广`(一般是4个字节)
wanghi 2006-05-07
  • 打赏
  • 举报
回复
unsigned char i=0;
wanghi 2006-05-07
  • 打赏
  • 举报
回复
comparison is always true due to limited range of data type
king_water 2006-05-07
  • 打赏
  • 举报
回复
当然会
=127 和 = 1 处理是一样的,都是<=127
fiftymetre 2006-05-07
  • 打赏
  • 举报
回复
改成int的不就行了吗。总之不用char就好
chenhu_doc 2006-05-07
  • 打赏
  • 举报
回复
#include "stdio.h"

int main()
{
char string[]="china";
unsigned char i=0; //------------> convert to unsigned
//------------>otherwise the data should overflow
//char i = 0; //------------> when i=127 and add 1 the result jumps to -128
//----------> -128 -> 127 it's funy, is't it?
for(i=0;i<=127;i++)
printf("%s%d\n",string,i);
return 0;
}
shanzhongyufu 2006-05-07
  • 打赏
  • 举报
回复
改成int i

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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