關於C語言裡getchar和scanf的思考

2021-07-09 19:16:11 字數 1083 閱讀 4855

今天在做《c primer plus》的課後習題的時候,有這樣一道題:

編寫乙個程式讀入一行輸入,然後反向列印該行。

您可以把輸入儲存在乙個char陣列中;假定該行不超過255個字元。

回憶一下,您可以使用具有%c說明符的scanf()從輸入中一次讀入乙個字元,

而且當您按下回車鍵時會產生換行字元(\n)。

按照題目要求 我編寫了這樣一段**:

/*編寫乙個程式讀入一行輸入,然後反向列印該行。

您可以把輸入儲存在乙個char陣列中;假定該行不超過255個字元。

回憶一下,您可以使用具有%c說明符的scanf()從輸入中一次讀入乙個字元,

而且當您按下回車鍵時會產生換行字元(\n)。*/

#include int main()

while(i>=0)

printf("\n");

return 0;

}

這段**在當你輸入一串字串的時候是沒有響應的 因為這裡scanf裡確實成功的輸入了值,等於這個判斷條件成為了 當 1或0 != 『\n』時 ,迴圈下列**,所以這個程式完全不能完成**反向輸出,在思考和網上查閱資料並沒有滿意的結果,於是我用putchar函式試了一下改變 迴圈條件:

while( scanf("%c",&ch[i]) == 1 )  改變為 while( (ch[i] = getchar()) != '\n')  這個程式就可以正確的反向輸出字串了,但是我並不滿意,因為我想用scanf函式輸入的時候也能進行條件判斷,於是我試著再改寫了一下判斷條件:

改變為  while( scanf("%c",&ch[i]), ch[i] != '\n' ) 時,這個程式也可以反向輸出字串,雖然書上寫ch = getchar() 與scanf("%c",&ch)有著相同的效果,但是就這個題而言還是不一樣的,更改後的正確**如下:

#include int main()

while(i>=0)

printf("\n");

return 0;

}

如果我的理解有問題,希望大家能批評指正。



c語言中的getchar 和putchar

getchar 和putchar 函式時字元輸入輸出函式,其返回值都是int 整型。getchar 從鍵盤上輸入乙個字元,函式的返回值是輸入的第乙個字元的ascii碼字元的ascii值,若出錯返回 1,且將使用者輸入的字元回顯到螢幕。注意 1 使用者在按回車之前輸入了不止乙個字元,其他字元會保留在鍵...

C語言中的getchar和putchar詳解

首先給出 the c programming language 這本書中的例子 include int main return 0 這裡主要解釋下為什麼要用int型來接受getchar函式。很多時候,我們會寫這樣的兩行 char c c getchar 這樣就很有可能出現問題。因為getchar函式...

C語言中的getchar和putchar詳解

一 首先給出 the c programming language 這本書中的例子 include int main return 0 這裡主要解釋下為什麼要用int型來接受getchar函式。很多時候,我們會寫這樣的兩行 char c c getchar 這樣就很有可能出現問題。因為getchar...