2014-01-09 83 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 = �