getchar() 和getch()的區別。。

選材自百度百科:http://baike.baidu.com/view/8858246.htm?fr=aladdin
                                http://baike.baidu.com/link?url=prP2Bsl6Hx8IdaSt_oEyHEAh5F0yhBv458fKZK9PMXB6IK7-N5vdMp4nLR38-I_n


在C primer plus編程題上看到一道題:

編寫一個程序。該程序讀取輸入直到遇到#字符,然後報告讀取的空格數目、讀取的換行符數目以及讀
取的所有其他字符數目。

答案:

#include<stdio.h>
int main(void)
{
int space=0,newline=0,others=0;
char a;
printf("Please input a string end by #:");
while((a=getchar()) != '#')
if(a == ' ') space++;
else if (a == '\n') newline++;
else others++;
printf("space: %d,newline: %d,others: %d\n",space,newline,others);
return(0);
}

程序優點:輸入字符可見。

程序缺陷:輸入#後,程序沒有停止,必須先回車。。


其中使用getchar()讀取輸入的字符;

getchar()和getch()的區別:

        getchar有一個int型的返回值.當程序調用getchar時.程序就等着用戶按鍵.用戶輸入的字符被存放在鍵盤緩衝區中.直到用戶按回車爲止(回車字符也放在緩衝區中).當用戶鍵入回車之後,getchar纔開始從stdio流中每次讀入一個字符.getchar函數的返回值是用戶輸入的第一個字符的ASCII碼,如出錯返回-1,且將用戶輸入的字符回顯到屏幕.如用戶在按回車之前輸入了不止一個字符,其他字符會保留在鍵盤緩存區中,等待後續getchar調用讀取.也就是說,後續的getchar調用不會等待用戶按鍵,而直接讀取緩衝區中的字符,直到緩衝區中的字符讀完爲後,纔等待用戶按鍵.
        getch與getchar基本功能相同,差別是getch直接從鍵盤獲取鍵值,不等待用戶按回車,只要用戶按一個鍵,getch就立刻返回, getch返回值是用戶輸入的ASCII碼,出錯返回-1.輸入的字符不會回顯在屏幕上.getch函數常用於程序調試中,在調試時,在關鍵位置顯示有關的結果以待查看,然後用getch函數暫停程序運行,當按任意鍵後程序繼續運行.

        用getch();會等待你按下任意鍵,再繼續執行下面的語句;
        用ch=getch();會等待你按下任意鍵之後,把該鍵字符所對應的ASCII碼賦給ch,再執行下面的語句。

        易錯點

1.所在頭文件是conio.h。而不是stdio.h。

2.在使用之前要調用initscr(),結束時要調用endwin()。否則會出現不輸入字符這個函數

也會返回的情況。

3.在不同平臺,輸入回車,getch()將返回不同數值,而getchar()統一返回10(即\n)

1)windows平臺下ENTER鍵會產生兩個轉義字符 \r\n,因此getch返回13(\r)

2)unix、 linux系統中ENTER鍵只產生 \n ,因此getch返回10(\n)。

3)MAC OS中ENTER鍵將產生 \r ,因此getch返回13(\r)。

         getch()並非標準C中的函數,不存在C語言中。所以在使用的時候要注意程序的可移植性。國內C語言新手常常使用getch()來暫停程序且不知道此函數來源,建議使用getchar();(如果情況允許)代替此功能或更換一款編譯器。

故此,使用getch()這道題:

#include<conio.h>

int main()
{
	int space=0,newline=0,other=0;
	char a;
	printf("Please input a string end by #:");
	while((a=getch())!='#')
		if(a==' ') space++;
	    else if(a=='\r') newline++;
	    else other++;
	printf("space:%d,newline:%d,other:%d\n",space,newline,other);
	return 0;
}

程序優點:輸入#,程序就停止了。

程序缺陷:輸入的字符是不可見的。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章