2015-02-05 33 views
0

因此,這裏是我的問題。我在k & R中讀到一個字符在內部表示爲一個數字。所以只是爲了檢查我試用了這兩個程序。字符的數字表示

#include<stdio.h> 
int main() 
{ 
    int num; 
    char cht; 
    scanf("%d",&num); 
    scanf("%c",&cht); 
    if(num==cht) 
     printf("they are same\n"); 
    else 
     printf("they are not same\n"); 
    return 0; 
} 

當我運行這個程序。對於與cht的ascii值相同的輸入num,它仍然顯示「它們不相同」。

但是對於這個程序它工作。

#include<stdio.h> 
int main() 
{ 
    int num; 
    scanf("%d",&num); 
    if(num=='A') 
     printf("they are same\n"); 
    else 
     printf("they are not same\n"); 
    return 0; 
} 

這裏,如果我給NUM = 65,這works.My問題是,爲什麼在這兩種情況下有什麼不同?

+0

此代碼工作?你給了兩個輸入'scanf(「%c」,&cht);'在那裏?怎麼辦? –

+0

這對我有用!(也許增加一個空格:'scanf(「%c」,&cht);') – Rizier123

+0

@ Rizier123這就是我意思是:-) –

回答

2

我認爲這個問題是

scanf("%c",&cht); 

應該

scanf(" %c",&cht); 

當你輸入整數,然後按回車即有在緩衝區中,你需要與之前放置的空間去消費%c。這兩個代碼都會工作,ASCII值與字符匹配。

+0

謝謝,它工作。 – user2738777

2

在第一個例子,cht沒有得到時按下,而是獲得新行字符從ENTER你輸入後按下。

0

要修復代碼,請在掃描字符時添加前導空格。它會以前的輸入 [\n],否則,它會讀取剩餘的\n這是一個有效的輸入%c

添加領先[]將告訴scanf()忽略所有領先的空白家人的性格和讀取的第一個非空白之一。

如果沒有[] %c之前,你的程序越來越是\ncht