![](/img/trans.png)
[英]Unexpected input when using getchar(), and unexpected output using putchar()
[英]Unexpected putchar output when reading integer input with getchar
我正在完成這個計划:
#include<stdio.h>
main()
{
int c;
c = getchar();
while(c != EOF) {
putchar(c);
c = getchar();
}
}
由於變量c
是整數,它應該存儲給定輸入的整數等價值。 輸出顯示'a'
打印為'a'
, 'b'
打印為'a'
'b'
, 'c'
打印為'a'
'c'
但是,當我輸入值65
,輸出也是65
! 因此,值65
和char'a 'a'
的存儲格式必定存在一些差異
這兩個價值如何相互區別?
這是因為輸入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
您的代碼完全按照書面執行,但是,您對程序輸入的理解存在困惑。
鍵入65
它被解釋為兩個類型字符,即'6'
和'5'
。 正如您所注意到的,每次在while循環中調用putchar(c)
時,這就是回顯到控制台的內容。
不,65和'a'的存儲沒有區別。 將這些中的任何一個分配給變量會產生完全相同的結果。 差異僅與char的輸入和輸出有關。 例如printf(“%c”,65)產生'a',因為這是printf()
定義的一部分。 對於您提到的其他兩個函數putchar()
和getchar()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.