在C中打印ASCII

时间:2014-01-09 20:57:15

标签: c for-loop ascii

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

2 个答案:

答案 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 = �