2013-10-08 69 views
0

這是一個超級基本問題...我重新學習C(沒有使用它超過5年)。我無法獲得此代碼的工作。我試圖掃描一個用戶輸入(ascii字符)作爲一個整數,並顯示輸入字符的ascii代碼。C - 掃描字符並顯示ASCII碼

#include <stdio.h> 
int main(int argc, char *argv[]) { 

    int character; 

    printf("Welcome to ASCII:\n"); 

    do { 
    scanf("%d",&character); 

    printf("ascii: %d\n",character); 
    } while(character != 999); 

    printf("Done.\n"); 

    return 0; 
} 

它只是顯示爲0,每輸入...

+0

適合我。使用fgets(緩衝區,大小,流)和sscanf()來拉取輸入,然後無效的輸入不會混淆你。無論如何,你要輸入什麼樣的字符?因爲如果您嘗試輸入字符並將其轉換爲序數值,請對scanf()和字符字符[99]使用「%c」作爲輸入。 – ChuckCottrill

回答

4

「我試圖掃描用戶輸入(ASCII字符)爲整數,並顯示ASCII碼爲輸入的字符」

你應該做的是完全相反的。你應該閱讀的字符,並顯示它作爲一個整數,即:

char c; 
scanf("%c", &c); // <-- read character 
printf("%d", c); // <-- display its integral value 

輸入:a,輸出:97


還要注意的是while(character != 999)還不是很幸運的選擇。的終止條件你的循環。檢查的scanf返回值來確定人物的讀數是否成功可能是更合理的位置:

while (scanf("%c", &character)) { 
    printf("ascii: %d\n", character); 
} 
+0

是的,但他的代碼會進入一個無限循環..因爲他沒有補償輸入後按下輸入 – sukhvir

+0

@sukhvir:我編輯了我的答案以解決循環以及。 – LihO

+0

謝謝!約999:我最初有'!= 0'(這是終止代碼),但切換到999,因爲我得到0爲用戶輸入。 –

1

試試這個:

#include <stdio.h> 
int main(int argc, char *argv[]) { 

    char character; 

    printf("Welcome to ASCII:\n"); 

    do { 
    scanf("%c",&character); 
    getchar(); // to get rid of enter after input 

    printf("ascii: %d\n",character); 
    } while(character != 999); 

    printf("Done.\n"); 

    return 0; 
} 

輸出:

d 
ascii: 100 
s 
ascii: 115 
0

你正試圖讀取一個整數(scanf(「%d」,& ...)),這是正常的操作失敗和t他的值爲0 - int變量的默認值。將「%d」更改爲「%c」,它應該可以工作。

+0

我非常懷疑「int變量的默認值」。 C不能這樣工作。如果提取失敗,則不能讀取該變量。它沒有確定性的價值,並且它可能是UB來讀取它。 –

+0

歡迎來到stackoverflow,只是一個友好的擡頭,你可以使用反引號代替內聯代碼 – fontno

0

變化:

printf("ascii: %c\n",character); 

然而,你的條件speciftied 999

+0

999只是一個終止代碼(也可以是0) –