青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

?? 網文ZT : 
??? 跟老婆講了幾次關于getch()的用法,老婆就是不長記性,在這里我總結一下,也算是為了老婆。
  首先不要忘了,要用getch()必須引入頭文件conio.h,以前學C語言的時候,我們總喜歡用在程序的末尾加上它,利用它來實現程序運行完了暫停不退出的效果。如果不加這句話,在TC2.0的環境中我們用Ctrl+F9編譯并運行后,程序一運行完了就退回到TC環境中,我們根本來不及看到結果,這時要看結果,我們就要按Alt+F5回到DOS環境中去看結果,這很麻煩。而如果在程序的結尾加上一行getch();語句,我們就可以省掉會DOS看結果這個步驟,因為程序運行完了并不退出,而是在程序最后把屏幕停住了,按任意鍵才退回到TC環境中去。那我們來看看getch()到底起的什么作用,getch()實際是一個輸入命令,就像我們用cin>>的時候程序會停下來等你輸入,和cin不同的是,getch()的作用是從鍵盤接收一個字符,而且并不把這個字符顯示出來,就是說,你按了一個鍵后它并不在屏幕上顯示你按的什么,而繼續運行后面的代碼,所以我們在C++中可以用它來實現“按任意鍵繼續”的效果,即程序中遇到getch();這行語句,它就會把程序暫停下來,等你按任意鍵,它接收了這個字符鍵后再繼續執行后面的代碼。
  你也許會問,為什么我們在C++中就沒有在程序的末尾加上getch(),解釋是,軟件總是不斷更新的,不好的地方當然要進行改正,getch()加在程序末尾,它又不賦值給任何變量,所以它在這個地方完全是垃圾代碼,與程序無關。C++中考慮到這一點,于是在每次程序運行完了并不退出,而是自動把屏幕停下來,并顯示“press any key...”叫你按任意鍵退出,這就好比C++在它的環境中運行程序,在程序的末尾自動加上了一行getch();語句,并且在這行語句前還添加了一行輸出語句cout<<"press any key...";來提示你程序結束了,按任意鍵繼續。實際上我們編譯好的程序在程序結束了本身是不會停下來的,我們可以在編譯產生的Debug目錄中找到這個編譯好的應用程序(擴展名exe),在文件夾中雙擊運行它,你會發現屏幕閃了一下MS-DOS窗口就關閉了,因為程序運行完就自動退出了,回到了windows環境,當然,如果我們在DOS環境中運行這個程序,我們就可以直接在看到DOS屏幕上看到程序運行結果,因為程序運行完后并不清屏。
  還有一個語句,和getch()很相似,getche(),它也需要引入頭文件conio.h,那它們之間的區別又在哪里呢?不同之處就在于getch()無返回顯示,getche()有返回顯示。怎么說呢?我舉個例子你就明白了。
--------------------------------------
#include<stdio.h>
#include<conio.h>
void main()
{
??? char ch;
??? for(int i=0;i<5;i++)
??? {
??????? ch=getch();
??????? printf("%c",ch);
??? }
}
--------------------------------------
  這里輸入輸出我用的是C的函數庫,沒有用C++的iostream.h,這個我等會再說。首先這是個連續5次的循環來實現5次停頓,等待我們輸入,我們編譯并運行這個程序,假設我們分別輸入abcde,屏幕上顯示的結果是abcde,這個abcde并不是在ch=getch();中輸出的,我們把printf("%c",ch);這行語句去掉,就會發現我們按5次任意鍵程序就結束了,但屏幕上什么都沒有顯示。
  然后我們在把代碼中的getch()換成getche()看看有什么不同,我們還是分別輸入abcde,這時屏幕上顯示的結果是aabbccddee,我們把printf("%c",ch);這行語句再去掉看看,顯示的結果就是abcde了,說明程序在執行ch=getche();這條語句的時候就把我們輸入的鍵返回顯示在屏幕上,有無回顯就是它們的唯一區別。
  好了,我們再來說說為什么不用C++函數庫的原因。你可以試試把這個程序改成C++的形式:
--------------------------------------
#include<iostream.h>
#include<conio.h>
void main()
{
??? char ch;
??? for(int i=0;i<5;i++)
??? {
??????? ch=getch();
??????? cout<<ch;
??? }
}
--------------------------------------
  你會發現運行結果是完全不同的,說實話我也搞不清它是怎么編譯運行的,以前我在C++中用它來實現任意鍵繼續的功能就發現了這個問題。如果在getch();后面有個cout<<"……";語句的話他會先執行下面的cout<<"……";然后再執行getch();實現停頓,有時再兩個語句中間加上一個cout<<endl;可以解決這個問題,但如果用C中的printf()就從沒有出現過這種問題。至于到底是為什么,我也不知道,只能猜想,可能是因為getch()是C的函數庫中的函數,在C++中不怎么好用,就是說是編譯系統本身的問題,與我們寫的程序沒有關系。不知道我分析是不是正確的,還希望高手能予以指點,謝謝!
  有人會說,既然是C的函數庫中的,那么就應該淘汰了,我們還研究它,還用它干嘛?但是我發現還是有用著它的地方,否則我也不會在這里說這么多來耽誤大家的時間。我就舉個例子吧,程序如下:
--------------------------------------
#include<stdio.h>
#include<conio.h>

void main()
{
??? char ch='*';
??? while(ch=='*')
??? {
??????? printf("\n按 * 繼續循環,按其他鍵退出!");
??????? ch=getch();
??? }
??? printf("\n退出程序!");
}
--------------------------------------
  我們可以在這個循環體中添加我們想要的功能,程序中按*繼續循環,其他任意鍵退出,而且利用getch()無回顯的特性,我們不管按什么,都不會在屏幕上留下痕跡,使我們的界面達到美觀效果,如果還有更好的辦法實現這個功能,我可能就不會在這里提這么多了。如果你真的有更好的辦法,請一定告訴我,謝謝!
  下面我把別人網頁上的幾個例子轉載如下:
--------------------------------------
//例一:這個例子是為了說明getch()和getche()的區別
#include<stdio.h>
#include<conio.h>

//這里講個小故事:因為這個代碼是在別人網頁上的,別人用的C環境,可能是不需要conio.h頭文件
//就可以用getch();(我就不清楚了),也可能是忘了寫,網頁上的源代碼沒有#include<conio.h>這一行,
//我讓老婆去看這個網頁,老婆把網頁上的代碼復制到C++環境中,不能編譯就跟我哭,
//呵呵,我可愛的傻老婆!

void main()
{
??? char c, ch;
??? c=getch();???? /*從鍵盤上讀入一個字符不回顯送給字符變量c*/
??? putchar(c);??? /*輸出該字符*/
??? ch=getche();?? /*從鍵盤上帶回顯的讀入一個字符送給字符變量ch*/
??? putchar(ch);
??? printf("\n\n");
}
--------------------------------------
//例二:這個例子是演示交互輸入的過程中完成暫停功能
#include<stdio.h>
#include<conio.h>
void main()
{
??? char c, s[20];
??? printf("Name:");
??? gets(s);
??? printf("Press any key to continue...\n\n");
??? getch();? /*等待輸入任一鍵*/
??? printf("\n\n");
}
--------------------------------------
//例三:getchar()函數也是從鍵盤上讀入一個字符,并帶回顯。它與前面兩個函數的區別在于:
//   getchar()函數等待輸入直到按回車才結束,回車前的所有輸入字符都會逐個顯示在屏幕上。
//   但只有第一個字符作為函數的返回值。
#include<stdio.h>
#include<conio.h>
void main()
{
??? char c;
??? c=getchar();?? /*從鍵盤讀入字符直到回車結束*/
?????????? //getchar()在這里它只返回你輸入字符串的第一個字符,并把返回值賦值給c
??? putchar(c);??? /*顯示輸入的第一個字符*/
??? printf("\n\n");
}
--------------------------------------
//例四:呵呵,這個程序你運行一下,相信你又會有疑問了
#include<stdio.h>
#include<conio.h>
void main()
{
??? char c;
??? while ((c=getchar())!='\n')??? /*每個getchar()依次讀入一個字符*/
??????? printf("%c",c);??????? /*按照原樣輸出*/
??? printf("\n\n");
}
--------------------------------------
  例四的程序運行時,首先停下來,等你輸入一串字符串,輸入完畢后,它把你輸入的整個字符串都輸出來了,咦,你不是說getchar()只返回第一個字符么,這里怎么?
  不要急,我慢慢跟你解釋,忍耐一下,馬上就講完了。因為我們輸入的字符串并不是取了第一個字符就把剩下的字符串丟掉了,它還在我們的內存中,就好比,開閘放水,我們把水放到閘里去以后,開一次閘就放掉一點,開一次就放掉一點,直到放光了為止,我們輸入的字符串也是這么一回事,首先我們輸入的字符串是放在內存的緩沖區中的,我們調用一次getchar()就把緩沖區中里出口最近的一個字符輸出,也就是最前面的一個字符輸出,輸出后,就把它釋放掉了,但后面還有字符串,所以我們就用循環把最前面的一個字符一個個的在內存中釋放掉,直到不滿足循環條件退出為止。例子中循環條件里的'\n'實際上就是你輸入字符串后的回車符,所以意思就是說,直到遇到回車符才結束循環,而getchar()函數就是等待輸入直到按回車才結束,所以實現了整個字符串的輸出。當然,我們也可以把循環條件改一下,比如while ((c=getchar())!='a'),什么意思呢,意思就是遇到字符'a'就停止循環。

  明白了嗎?^_^? 好了,休息會去吧,別老在電腦面前盯著

posted on 2006-11-01 17:21 哈哈 閱讀(3838) 評論(4)  編輯 收藏 引用

評論:
# re: getchar(),gets()和getch()的區別 2007-03-04 13:11 | ADBEAR
剛開始準備學習C++,從你這里學到了不少,謝謝了!  回復  更多評論
  
# re: getchar(),gets()和getch()的區別 2008-03-07 16:30 | 瘋子
很有收獲。  回復  更多評論
  
# re: getchar(),gets()和getch()的區別 2008-03-24 12:08 | willing
呵呵,感謝LZ,  回復  更多評論
  
# re: getchar(),gets()和getch()的區別 2009-10-10 10:42 | LCM
getch()和getchar()取得的enter鍵的ASCII碼為什么一個是13一個是10?  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲第一二三四五区| 国产精品久久97| 国产精品美女久久福利网站| 亚洲欧美综合精品久久成人| 欧美一区二区三区喷汁尤物| 狠狠色丁香婷婷综合久久片| 亚洲国产午夜| 国产精品网站视频| 国产精品麻豆成人av电影艾秋| 国产日韩欧美中文| 欧美成人亚洲| 欧美亚洲第一页| 免费短视频成人日韩| 欧美日韩一区综合| 鲁大师成人一区二区三区| 欧美日韩国产在线播放| 久久久久久999| 欧美日韩一级大片网址| 久久一综合视频| 国产精品久久久久国产a级| 免费成人黄色| 国产日产欧美精品| 日韩一级在线观看| 亚洲激情视频| 久久精品一区二区三区不卡牛牛| 99re6这里只有精品视频在线观看 99re6这里只有精品 | 亚洲观看高清完整版在线观看| 国产精品久久久久9999高清| 亚洲国产精品福利| 激情成人av在线| 亚洲男人的天堂在线| 女同一区二区| 久久精品首页| 国产精品一区在线观看| 日韩午夜av在线| 亚洲精品乱码久久久久久久久| 久久成人av少妇免费| 亚洲欧美日韩国产一区二区三区 | 久久国产精品亚洲va麻豆| 欧美日韩国产小视频在线观看| 欧美成人日本| 亚洲电影在线观看| 久久久99久久精品女同性| 久久国产精品久久久久久久久久| 欧美亚一区二区| 亚洲最新视频在线| 一区二区黄色| 欧美天天综合网| 99爱精品视频| 亚洲特级毛片| 国产精品久久久久久av下载红粉 | 亚洲美女免费精品视频在线观看| 久久久久一区二区三区四区| 久久婷婷国产综合国色天香| 国产一区二区三区在线免费观看| 欧美一区二区女人| 久久人人爽人人| 在线观看不卡av| 久热综合在线亚洲精品| 欧美成人午夜剧场免费观看| 91久久在线| 欧美日韩国产一级| 亚洲视频免费看| 久久国产精品99国产| 国产一区二区毛片| 免费日韩成人| 日韩一二三区视频| 午夜日韩激情| 精品99视频| 欧美在线日韩| 精品成人国产在线观看男人呻吟| 久久国内精品自在自线400部| 久久综合伊人| 91久久国产精品91久久性色| 欧美精品在线免费观看| aa亚洲婷婷| 欧美午夜在线| 久久成人av少妇免费| 欧美激情按摩| 一区二区三区 在线观看视频| 国产精品国产一区二区 | 妖精视频成人观看www| 国产精品成av人在线视午夜片| 亚洲免费一在线| 欧美福利在线| 西瓜成人精品人成网站| 亚洲国产天堂久久综合| 欧美亚洲成人精品| 久久精品午夜| 99在线精品视频在线观看| 久久久久国产免费免费| 欧美日韩岛国| 久久精品国产在热久久| 亚洲精品之草原avav久久| 久久国产精品一区二区三区| 亚洲欧洲精品天堂一级| 国产精品久久久一区二区| 榴莲视频成人在线观看| 亚洲天堂av在线免费观看| 欧美+亚洲+精品+三区| 亚洲男人第一网站| 亚洲高清久久网| 国产美女精品视频| 欧美精品二区三区四区免费看视频| 亚洲永久在线| 日韩小视频在线观看专区| 久久婷婷av| 欧美一区二视频在线免费观看| 亚洲国产综合91精品麻豆| 国产精品自拍在线| 欧美激情综合在线| 久久久国产精品一区二区中文| 一本大道久久精品懂色aⅴ| 欧美高清视频一二三区| 久久久91精品国产一区二区三区 | 久久综合亚州| 亚洲影院在线观看| 亚洲精品视频免费| 久久日韩精品| 亚洲欧美日韩在线不卡| 亚洲九九精品| 亚洲国产精品激情在线观看| 国产精品一区在线观看你懂的| 欧美日韩第一页| 女人色偷偷aa久久天堂| 欧美黄色小视频| 老司机午夜精品视频在线观看| 午夜在线成人av| 一级日韩一区在线观看| 亚洲国产精品一区在线观看不卡| 国产日韩精品在线观看| 国产精品高潮呻吟视频| 欧美日韩国内| 欧美日韩视频在线第一区| 欧美大尺度在线观看| 久久免费国产精品| 久久成人精品| 久久福利影视| 久久精品国产精品| 久久av一区二区三区| 欧美资源在线| 一区二区三区四区精品| 亚洲综合欧美日韩| 99精品欧美一区二区三区综合在线| 欧美插天视频在线播放| 久久久www成人免费毛片麻豆| 午夜免费久久久久| 午夜视频久久久久久| 亚洲欧美综合精品久久成人| 亚洲一区二区欧美| 亚洲一区二区三区视频播放| 亚洲男同1069视频| 欧美在线free| 久久久伊人欧美| 麻豆成人综合网| 欧美国产日本| 欧美阿v一级看视频| 欧美大片一区| 亚洲人成人一区二区三区| 亚洲精品免费网站| 日韩一二在线观看| 亚洲婷婷国产精品电影人久久| 亚洲小视频在线观看| 亚洲欧美日韩天堂| 久久精品久久综合| 夜夜狂射影院欧美极品| 亚洲视频精品| 久久精品免费| 欧美成人情趣视频| 欧美视频手机在线| 国产字幕视频一区二区| 欧美日韩在线观看视频| 国产欧美在线观看一区| 影音先锋日韩资源| 亚洲人在线视频| 一本综合精品| 久久精品2019中文字幕| 欧美高清视频| 亚洲一区视频在线| 久久久夜色精品亚洲| 欧美高清在线一区二区| 欧美天堂亚洲电影院在线观看| 国产夜色精品一区二区av| 亚洲国产精品久久91精品| 在线亚洲精品| 另类专区欧美制服同性| 亚洲日本乱码在线观看| 欧美一区二区三区另类| 欧美激情中文字幕乱码免费| 国产日韩欧美| 中文国产亚洲喷潮| 老色鬼精品视频在线观看播放| 9久re热视频在线精品| 久久国产手机看片| 欧美日韩一本到| 亚洲国产精品欧美一二99| 亚洲欧美一区二区激情| 亚洲二区视频| 欧美一区二区三区四区高清| 欧美精彩视频一区二区三区|