我正在尝试编写一个程序,它将使用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;
}
答案 0 :(得分:5)
当循环达到127
时,允许继续循环。然后,127
增加1.因为它是signed char
,它会换行到-128
,它仍然符合循环条件。实际上,signed char
的每个值都小于或等于127
更正常的做法是为您的循环使用更大的数据类型,例如int
。
for (int i = 0; i < 256; i++) {
printf("%d = %c\n", i, i);
}
答案 1 :(得分:0)
因为签名的字符永远不会大于127
...
#include <stdio.h>
int main (void) {
printf("%d = %c\n", (char) 128, (char) 128);
printf("%d = %c\n", (char) -128, (char) -128);
}
输出
-128 = �
-128 = �