【发布时间】:2014-01-10 05:18:57
【问题描述】:
我正在尝试编写一个程序,该程序将使用 for 循环打印出所有 ASCII 字符,但它一直在无限循环,除非我取出 127,我做错了什么还是 ASCII 的行为方式?
这会崩溃(无限循环):
#include <stdio.h>
int main (void)
{
for (char i = -128; i <= 127; i++)
{
printf("%d = %c\n", i, i);
}
return 0;
}
但这很好:
#include <stdio.h>
int main (void)
{
for (char i = -128; i < 127; i++)
{
printf("%d = %c\n", i, i);
}
printf("%d = %c\n", 127, 127);
return 0;
}
【问题讨论】:
-
如果
i是有符号的8 位char类型,i <= 127始终为真。 -
从0循环而不是-127,没有负值ASCII字符
-
Twos Complement 浮现在脑海中。
-
您使用的是什么编译器版本,您启用了哪些警告?理想情况下,会有一个编译器警告
i <= 127始终为真,您应该调查此类警告是否存在代码中可能存在的错误。 -
请注意,“崩溃”与“无限循环”不同。在第一种情况下,您的程序异常终止。在第二种情况下,只要您允许,您的程序就会继续愉快地运行。