C语言陷入死循环的原因
代码如下:main(){charc=10;for(c=0;c<255;c++)/*当不进行无符号类型转换,程序会陷入死循环*/{if(!(c%16)){printf("\...
代码如下:
main()
{
char c=10;
for(c=0;c<255;c++)/*当不进行无符号类型转换,程序会陷入死循环*/
{
if(!(c%16))
{
printf("\n%02XH ",(usigned char)c/16);/*如果到了128 16进制高位是80,当用作无符号时 先 进 行扩展成FF80 */
}
printf("%c",c);// 语句1
}
printf(“%c”,147);//语句2
}
问题;本程序会陷入死循环,而且发出蜂鸣声,原因出在哪里?如果说是因为越界,为何语句2是可以正确执行的?或者说是在打印哪一个字符时出现了问题,谢谢 展开
main()
{
char c=10;
for(c=0;c<255;c++)/*当不进行无符号类型转换,程序会陷入死循环*/
{
if(!(c%16))
{
printf("\n%02XH ",(usigned char)c/16);/*如果到了128 16进制高位是80,当用作无符号时 先 进 行扩展成FF80 */
}
printf("%c",c);// 语句1
}
printf(“%c”,147);//语句2
}
问题;本程序会陷入死循环,而且发出蜂鸣声,原因出在哪里?如果说是因为越界,为何语句2是可以正确执行的?或者说是在打印哪一个字符时出现了问题,谢谢 展开
5个回答
展开全部
char c=10;
for(c=0;c<255;c++)/*当不进行无符号类型转换,程序会陷入死循环*/
====================
知道不进行无符号类型转换,程序会陷入死循环了啊,却不知道原因。看下面:
这个c的最大正整数只能到127,c<255永远成立。情况是:c++到127之后变为了负数(称为算术溢出),一直加又从0开始了,所以死循环。
把 char c=10;
改为 int c;
赋值没用,因为for循环又重新赋值了。
至于出现蜂鸣声,是打印的字符中有一个(大概是4)代表beep,就是蜂鸣,结果就是打不出字符,出现蜂鸣声。
for(c=0;c<255;c++)/*当不进行无符号类型转换,程序会陷入死循环*/
====================
知道不进行无符号类型转换,程序会陷入死循环了啊,却不知道原因。看下面:
这个c的最大正整数只能到127,c<255永远成立。情况是:c++到127之后变为了负数(称为算术溢出),一直加又从0开始了,所以死循环。
把 char c=10;
改为 int c;
赋值没用,因为for循环又重新赋值了。
至于出现蜂鸣声,是打印的字符中有一个(大概是4)代表beep,就是蜂鸣,结果就是打不出字符,出现蜂鸣声。
展开全部
char 占一个字节,就是8bit,最大值
1111 1111 这就是它的二进制
而十进制 就是 255.
当它再加1后,会溢出,计算机会就其值从0开始计算。
1111 1111 这就是它的二进制
而十进制 就是 255.
当它再加1后,会溢出,计算机会就其值从0开始计算。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
if(!(c%16))
这里一句可以化为if(!(c%16)==1);
也就是if(c%16==0)
所以只有当c=0的时候才会结束啊,所以你的程序会出现死循环
这里一句可以化为if(!(c%16)==1);
也就是if(c%16==0)
所以只有当c=0的时候才会结束啊,所以你的程序会出现死循环
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char 有符号时取值范围是 -128到127 只有无符号时才是0-255
还有什么问题吗?
还有什么问题吗?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询