在C中打印ASCII

use*_*599 0 c ascii for-loop

我正在尝试编写一个程序,它将使用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)

pad*_*ddy 5

当循环到达时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)