我正在尝试编写一个程序,它将使用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;
}
Run Code Online (Sandbox Code Playgroud)
但这很好:
#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;
}
Run Code Online (Sandbox Code Playgroud)
当循环到达时127,允许继续.然后,127增加1.因为这是signed char,它包裹-128,仍然符合循环条件.实际上,每个值signed char都小于或等于127
更常见的事情是使用更大的数据类型,例如int循环.
for (int i = 0; i < 256; i++) {
printf("%d = %c\n", i, i);
}
Run Code Online (Sandbox Code Playgroud)