久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

各種字符串輸入函數解析

 淵勇 2011-04-08
1.關于getch() getchar() getche()

    

    getch():

    所在頭文件:conio.h

    函數用途:從控制臺讀取一個字符,,但不顯示在屏幕上
    函數原型:int getch(void)
    返回值:讀取的字符

    例如:
    char ch;或int ch,;
    getch();或ch=getch();

    用getch();會等待你按下任意鍵,,再繼續(xù)執(zhí)行下面的語句,;

    用ch=getch();會等待你按下任意鍵之后,,把該鍵字符所對應的ASCII碼賦給ch,再執(zhí)行下面的語句,。
    易錯點:所在頭文件是conio.h,。而不是stdio.h,。
    getch();并非標準C中的函數,,不存在C語言中。所以在使用的時候要注意程序的可移植性,。國內C語言新手常常使用getch();來暫停程序且不知道此函數來源,,建議使用getchar();(如果情況允許)代替此功能或更換一款編譯器,。

    

    函數名: getche
    功 能: 輸入后立即從控制臺取字符,不以回車為結束(帶回顯)
    用 法: int getche(void);
    程序例:
    #include <stdio.h>
    #include <conio.h>
    int main(void)
   {
    char ch;
    printf("Input a character:");
    ch = getche();
    printf("\nYou input a '%c'\n", ch);
    return 0;
   }

    

    函數名:getchar

    而對于getchar,,我們知道getchar有一個int型的返回值.當程序調用getchar時.程序就等著用戶按鍵.用戶輸入的字符被存放在鍵盤緩沖區(qū)中.直到用戶按回車為止(回車字符也放在緩沖區(qū)中).當用戶鍵入回車之后,getchar才開始從stdio流中每次讀入一個字符.getchar函數的返回值是用戶輸入的第一個字符的ASCII碼,如出錯返回-1,且將用戶輸入的字符回顯到屏幕.如用戶在按回車之前輸入了不止一個字符,其他字符會保留在鍵盤緩存區(qū)中,等待后續(xù)getchar調用讀取.也就是說,后續(xù)的getchar調用不會等待用戶按鍵,而直接讀取緩沖區(qū)中的字符,直到緩沖區(qū)中的字符讀完為后,才等待用戶按鍵.

  getch與getchar基本功能相同,差別是getch直接從鍵盤獲取鍵值,不等待用戶按回車,只要用戶按一個鍵,getch就立刻返回, getch返回值是用戶輸入的ASCII碼,出錯返回-1.輸入的字符不會回顯在屏幕上.getch函數常用于程序調試中,在調試時,在關鍵位置顯示有關的結果以待查看,然后用getch函數暫停程序運行,當按任意鍵后程序繼續(xù)運行.

  這個版本忽略了個重點,,getch()是非緩沖輸入函數,就是不能用getch()來接受緩沖區(qū)已存在的字符,,如以下C++程序,,

  int i;while(cin>>i);cin.clear();getchar();運行時如果輸入1 2 3 a時必須用getchar()才能在后面程序獲得正常輸入,即使先前已經恢復流了,,此處用getch()是萬萬不行的,。---這一段從百度詞條看到,不是很明白c++中字符串輸入規(guī)則
先看看規(guī)范點的說法:

 getchar

This is a standard function that gets a character from the stdin.

 getch

This is a nonstandard function that gets a character from keyboard, does not echo to screen.

 getche

This is a nonstandard function that gets a character from the keyboard, echoes to screen.

Use getchar if you want it to work on all compilers. Use getch or getche on a system that supports it when you want keyboard input without pressing [Enter].And note that the return value of all three is int! You need this to properly check for EOF.

 結合實際,,談談具體的區(qū)別與用法:

    getchar()函數只有在滿足輸入次數要求的前提下,,遇到回車時才結束輸入,之前所有的字符都會逐個顯示在屏幕上,,但是只有第一個字符返回一個ASCII碼,。

    具體的過程就是getchar()被調用時,程序就等著用戶按鍵,,且將用戶輸入的字符依次回顯到屏幕,,用戶必須摁完規(guī)定的次數(循環(huán)語句)(即使是回車也要摁),所有的字符都會保留在鍵盤緩存區(qū)中(回車字符也放在緩存區(qū)中),,等待后續(xù)getchar調用讀取,。也就是說,后續(xù)的getchar調用不會等待用戶按鍵,,而直接讀取緩沖區(qū)中的字符,直到讀完規(guī)定的次數后(并不是讀完緩沖區(qū)的字符),,才等待用戶按鍵。

     getch()函數任何時候遇到回車鍵都能結束,,而且不會回顯輸入的字符,,但是每輸入一個字符都會立即返回一個ASCII碼。具體的過程就是,,每摁一次鍵就調用一次getch(),,直到遇回車結束。如果在規(guī)定次數前結束,,系統論并沒有存入結束符,,我們要手動地在他末尾添加一個‘\0’字符。這個也好理解,,其實getchar()就相當于是翻譯型的,,他連回車字符也給翻譯了,然后一起存入;而getch()是解釋型的,,每輸入一條就翻譯,,然后存入,遇回車字符時剛翻譯完是回車,,所以他就得退出了,。

     getch函數常用于程序調試中,在調試時,,在關鍵位置顯示有關的結果以待查看,,然后用getch函數暫停程序運行,當按任意鍵后程序繼續(xù)運行,。

我們看一個具體的例子:

Int i;

char tmp[20];

for ( i="0" ; i<20; i++ )

{

  tmp[i] = getch() ;      //關鍵點1

 // tmp[i]=getchar();

 // putchar ( '*' ) ;

 printf ( "%d=[%c]\n",i,tmp [i] ) ;

 if ( tmp[i] == '\r' )

{

  tmp [i] = '\0' ;     //關鍵點2

  break ;

 }

}

大家先分析下上面這段代碼的功能吧,,這是一個最多為20位的密碼輸入功能,既然是密碼我們當然不希望他顯示原字符,,像linux用戶驗證那樣什么也不顯示,,但有的時候為了直觀一點,我們可以加入putchar(‘*’)語句,,就像QQ密碼在你每輸入一個字符時,,他就回顯一個“*”號。大家不防把上面的代碼敲一邊,,自己運行試試。

    接著上面的問題,,為什么說讀完規(guī)定的次數呢,,實例中的for循環(huán)了20次,但我們在輸入的時候可以輸入30,,50個字符,,對系統來說反正是放入緩沖區(qū),放多少都是放,,只不過在讀取的時候只循環(huán)了20次,,所以只能多20個字符,剩下的就被拋棄了,。但是如果我們只想輸入10個字符,,那么你就得摁剩下的10個回車鍵,因為getchar()輸入的字符被存放在鍵盤緩沖區(qū)中.直到用戶輸入足夠的次數(20次)按回車后才返回,。因為在20次前,,回車也是當做一個普通字符存入緩存區(qū)的。

    也就是說,,如果你的按鍵超過20次getch()自動結束,,而getchar()沒有任何提示,但在下次調用時只取前20個有效字符。如果你的按鍵不足20次,,getch()遇到回車就退出,,但是getchar()你必須按足20次后遇回車才結束,

    細心的朋友會發(fā)現,,調用getchar()時真正輸入的字符只有19個,,因為系統默認把第一個字符設為‘\0’.

    至于getche()函數用法那就很明了了,跟getch()唯一的不同點就是getche() 函數卻將讀入的字符回顯到顯示屏幕上,。

為什么getch獲取的enter鍵值是\r,,而getchar是\n呢?

\r 是回車,,return,,意思就是“回到行首”

\n 是換行,newline,,意思就是“另起一行”

我們在平時使用電腦時,,已經習慣了回車和換行一次搞定,敲一個回車鍵,,即是回車,,又是換行,但在早期的打字機上,,要另起一行打字需要兩個步驟,,首先要發(fā)送命令"\r”將打字頭復位,即回車,;然后再發(fā)送命令"\n”讓打字機走紙移到下一行,。

getch()不是ANSI里的標準庫函數,這是歷史遺留問題,,按照上述步驟,,是先發(fā)送"\t",所以getch獲取的enter鍵值是\r,。

getchar()是標準庫函數,,既“敲一個回車鍵,即是回車,,又是換行”,,而現在的“\n“表示既回車又換行的意思。

看看下面的函數:

#include<stdio.h>
main()
{
 FILE *fp;
 char ch,filename[10]="xw.c";
 //scanf("%s",filename);
 if((fp=fopen(filename,"a"))==NULL)
 {printf("connot open file\n");
 //exit(0);
 }
 //ch=getchar();
 ch=getchar();
 printf("ch is :%c\n",ch);
 while(ch!='#')
 {
  fputc(ch,fp);
  putchar(ch);
  ch=getchar();
 }
 fclose(fp);
}

我們運行程序,輸入:the string is xiongwei;回車;可以看到輸出:

ch is :t

the string is xiongwei;  此時這個字符串并沒有追加到xw.c中.

只有當輸入'#'時,程序才結束,打開xw.c文件可以看到字符串已經追加到文件中.

   第一次按回車時,ch 從鍵盤緩沖區(qū)讀取一個字母,并且打印出來,說明循環(huán)體之外的getchar()函數已經讀取完畢,既其結束條件已經滿足;而下面的循環(huán)體需要遇到’#’才算結束條件,所以下面輸入的所有字符,全都送入鍵盤緩沖區(qū),直到遇到’#’才結束輸入(輸入次數已到),開始讀取緩沖區(qū)中的內容.而需要注意的是:putchar()函數,其不管遇到結束符與否,只要有回車,就會把相應的緩沖區(qū)中的內容打印出來.


    本站是提供個人知識管理的網絡存儲空間,,所有內容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內容中的聯系方式,、誘導購買等信息,,謹防詐騙,。如發(fā)現有害或侵權內容,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多