2011-09-19 177 views
3

我正在經歷此程序讀取整數輸入時:意外的putchar輸出與的getchar

#include<stdio.h> 

main() 
{ 
int c; 

c = getchar(); 

while(c != EOF) { 
    putchar(c); 
    c = getchar(); 
    } 
} 

由於變量c是整數,它應存儲整數等效值對於給定的輸入。輸出顯示'a'打印爲'a','b''b''c''c'但是,當我輸入價格65時,輸出也是65!因此,值65和char 'a'

的存儲格式必須存在差異。兩個值如何相互區分?

+0

是的,當你按'6'和'5'時,輸出將是「65」。如果你想看到積分值,那麼使用printf(「%d」,c); –

+0

嘗試在'putchar(c)'之後爲整個小圖添加'putchar('\ n')' –

回答

2

這是因爲輸入65被視爲兩個不同的字符輸入,並且程序正在按順序打印它們。

當你輸入6時,程序立即讀取它並檢查它不是EOF,所以它將它打印到控制檯。然後當你輸入5時,它再次將其作爲輸入。由於這也不是EOF,您的程序再次打印它。

因此,您輸入了兩個字符,並且該程序正確地將其正確地打印到控制檯,就像它應該這樣做。除此之外,沒有歧視。 a的整數相當於是65,那麼它會打印65如果打印這樣的字符 -

char c = 'a'; 
printf("%d", c); // will print 65 

,這將打印a -

int i = 65; 
printf("%c", i); // will print a 
1

執行代碼完全一樣寫的,但是,混淆在於你對該計劃的投入的理解。

當您鍵入65時,它被解釋爲兩個輸入字符,即'6''5'。正如你所指出的那樣,每當在while循環中調用putchar(c)時,這就是回顯到控制檯的內容。

1

不,65和'a'的存儲沒有區別。將其中的任何一個賦值給一個變量都會得到完全相同的結果。差異只與char的輸入和輸出有關。例如。 printf(「%c」,65)產生'a',因爲這是printf()定義的一部分。對於您提到的其他兩種功能,putchar()getchar()也是如此。