2014-01-09 56 views
0

我正在尝试编写一个程序,它会打印出所有使用for循环的ASCII字符,但它会继续进行无限循环,除非我取出127,我做错了什么或者是如何使用ASCII表现?在C中打印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; 
} 
+5

'我<= 127'始终是真,如果'i'是一个有符号8位'char'类型。 –

+1

从0开始循环而不是-127,没有负值ASCII char –

+0

Twos补充想法。 –

回答

5

当循环达到127,它被允许继续。然后,127增加1.因为这是signed char,所以它包装到-128,它仍然符合循环条件。实际上,signed char的每个值都小于或等于127

更正常的做法是使用较大的数据类型,例如int用于循环。

for (int i = 0; i < 256; i++) { 
    printf("%d = %c\n", i, i); 
} 
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 = �