c/c++ 緩沖輸入和非緩沖輸入


C語言有緩沖輸入和非緩沖輸入兩種情況,默認緩沖輸入,因為有的計算機不支持非緩沖輸入。緩沖輸入下,通過標准輸入(鍵盤)輸入的字符會先存在輸入緩沖區里,同時會回顯到屏幕上。這樣就可以在輸入回車(將輸入緩沖區清空,並發送到程序的輸入隊列中,供程序使用)之前,進行輸入的修改。但是也支持非緩沖輸入,不需要輸入回車來將輸入發送給程序,而是鍵盤的任何輸入都直接發送到程序的輸入隊列中。

簡言之,緩沖輸入的流程是:鍵盤-》輸入緩沖區-》程序中的輸入隊列    非緩沖輸入的流程是: 鍵盤-》程序中的輸入隊列

getche()和getch()這兩個函數是用於非緩沖輸入的,前者提供回顯(記:多一個字母,多一個小功能),后者不提供回顯。

 

C函數一般都有返回值,只是有時候不需要獲取這個返回值罷了。

printf返回打印的字符的數目,有輸出錯誤則返回負數。

scanf返回讀入項目的個數,如果讀入失敗(比如想讀入一個%d,但是用戶卻輸入的'a')會返回0,這時候輸入隊列頭指針不向后移,下次getchar或者scanf還是從剛才的位置開始;讀到文件結尾返回EOF(一般在頭文件中會有#define EOF -1)。

 

測試getche和getch的例子如下所示:(在c++中需要加上頭文件 #include "conio.h"

#include "stdio.h"
int main(void)
{
    int d;
    char ch;
    printf("Input a character:");
    ch=getchar();
    printf("\nYou input a '%c'\n", ch);
    ch = getche();
    printf("\nYou input a '%c'\n", ch);
    ch=getch();
    printf("\nYou input a '%c'\n", ch);
    
    while((ch=getchar())!='\n')
    {
        putchar(ch);
    }
    getchar();
    return 0;
}

輸入:abcd[enter]jk

輸出:a 

        j

        k

        bcd  //說明輸入隊列不受getche和getch這些非緩沖函數的影響


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM