1. 程式人生 > >關於C語言裡getchar和scanf的思考

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

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

編寫一個程式讀入一行輸入,然後反向列印該行。
您可以把輸入儲存在一個char陣列中;假定該行不超過255個字元。
回憶一下,您可以使用具有%c說明符的scanf()從輸入中一次讀入一個字元,
而且當您按下回車鍵時會產生換行字元(\n)。

按照題目要求 我編寫了這樣一段程式碼:

/*編寫一個程式讀入一行輸入,然後反向列印該行。
您可以把輸入儲存在一個char陣列中;假定該行不超過255個字元。
回憶一下,您可以使用具有%c說明符的scanf()從輸入中一次讀入一個字元,
而且當您按下回車鍵時會產生換行字元(\n)。*/

#include <stdio.h>
int main()
{
	int i = 0;
	char ch[255];
	while( scanf("%c",&ch[i]) != '\n' )
	{
		i++;
	}
	while(i>=0)
	{
		printf("%c",ch[i-1]);
		i--;
	}
	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 <stdio.h>
int main()
{
	int i = 0;
	char ch[255];
	while( scanf("%c",&ch[i]), ch[i] != '\n' )
	{
		i++;
	}
	while(i>=0)
	{
		printf("%c",ch[i-1]);
		i--;
	}
	printf("\n");
	return 0;
}
如果我的理解有問題,希望大家能批評指正。