2013-10-15 79 views
-3

我已經使用getchar和putchar將輸入的字符先後打印到屏幕上,但是我稍微更改了代碼,現在它將連續兩次打印輸入的字符。代碼:在ANSI C中打印字符C

#include <stdio.h> 

int main() 
{ 
    int charInput; 
    printf("Enter a char >> "); 
    charInput = getchar(); 
    printf("%c", putchar(charInput)); 

    return 0; 
} 

我知道我可以使用putchar沒有printf,但我想試驗它們。我得到的輸出是:

Enter a char >> a 
aa 

2個字符都顯示在屏幕上?

+0

'putchar'返回成功的參數 – P0W

回答

2

putchar(charInput)將再次打印字符,然後將返回它的參數, charInput。然後傳到printf,再次打印相同的字符。

4

被打印爲使用printf()所以總打印2 a炭功能putchar(charInput)本身打印炭'a'並返回炭的十進制等價(例如ASCII)。

Manual page:

int putchar(int c);

的功能,fputc()putc()putchar()putc_unlocked()putchar_unlocked()返回字符寫入。如果發生錯誤 ,則返回值EOFputw()函數在 成功返回0;如果發生寫入錯誤,或者嘗試 以寫入只讀流,則返回EOF

所以,你可以假設:

printf("%c", putchar(charInput)); 
// ^  ^first `a` 
//  | second `a` 

等同於:

temp = putchar(charInput); // first `a` 
printf("%c", temp);   // second `a` 
1

這是因爲,一個來自printf,另一名來自putchar
只做這個

putchar(charInput);