2017-04-18 24 views
-1

嘿,我不明白爲什麼我的代碼不寫時,我只把++ ndigit [c](而不是++ ndigit [c -'0'],然後用++ nchar [c]沒關係。爲什麼我要寫c - '0'而不是c?

如果您有任何政黨成員,我會很感興趣!

#include <stdio.h> 

int main() 
{ 
    int c, i, y, ns; 
    int ndigit[10]; 
    int nchar[26]; 

    ns = 0; 

    for(i = 0; i >= 0 && i<= 9; ++i) { 
    ndigit[i] = 0; 
    } 

    for(y = 'a'; y <= 'z'; ++y) { 
    nchar[y] = 0; 
    } 

    while((c = getchar()) != EOF) { 
    if(c == ' ' || c == '\t') { 
     ++ns; 
    } 

    if(c >= 'a' && c <= 'z') { 
     ++nchar[c]; 
    } 

    if(c >= '0' && c <= '9') { 
    ++ndigit[c]; 
    //++ndigit[c-'0']; 
    } 

    if(c == '\n') { 
     printf("chiffres: "); 
     for(i=0;i<10;++i) { 
     printf("%d:%d ", i, ndigit[i]); 
     } 

     printf("lettres: "); 
     for(y='a';y<='z';++y) { 
     printf("%d:%d ", y, nchar[y]); 
     } 
     printf("space: %d\n", ns); 
    } 
    } 
} 
+3

這將在任何好的C書中得到解釋。我建議閱讀一個而不要跳過章節。 – Olaf

回答

1

由於字符'4'(例如)通常不等於整數4。即'4' != 4

採用最通用字符編碼方案ASCII,字符'4'擁有值52,字符'0'的值爲48。這意味着如果你做了'4' - '0'你練習到52 - 48並得到結果4作爲一個整數。

+0

Thx!我明白了。 –

1

實際上,當您將變量設置爲c='0'時,這意味着c的值現在是ascii值'0',即= 48. 由於您將c的值設置爲48,但數組大小是10,你的代碼會得到一個運行時異常,因爲你試圖訪問一個甚至不存在的索引。

請記住,當您使用'0'它意味着字符。因此,將該值設置爲int變量會使該值等於該字符的ascii值。相反,您可以直接使用c=0

+1

編碼可能不是ASCII。然而,標準確保字符「0」 - 「9」按順序編碼。請注意,此保證不適用於其他角色。 –

+0

但我認爲ascii值固定爲'0'到'9'和所有英文字母。 –

+0

同意你:) –

相關問題