fgets函數(shù)和緩沖區(qū)示例

fgets函數(shù)是gets函數(shù)的替代品,C11標(biāo)準(zhǔn)已經(jīng)廢除gets函數(shù).

  • fgets函數(shù)的第2個(gè)參數(shù), 它指明了讀入字符的最大數(shù)量,一般傳入數(shù)組的長度,如果該參數(shù)的值是n,那么fgets將讀入包括換行符在內(nèi)的n-1個(gè)字符,數(shù)組最后一個(gè)位置會自動(dòng)存空字符'\0'.
  • fget的返回值為一個(gè)char *指針,指向輸入的內(nèi)容第一個(gè)字符

下面回顯程序去掉了fgets讀取的換行符,如果輸入字符過多則丟棄

#include <stdio.h>
#define STLEN 10
int main(void)
{
    char words[STLEN];
    int i;
    
    puts("Enter strings (empty line to quit):");
    puts("------------------");        
    while (fgets(words, STLEN, stdin) != NULL
                          && words[0] != '\n')
    {   

        i = 0;
        while (words[i] != '\n' && words[i] != '\0')
            i++;
        if (words[i] == '\n')
        {
            printf("i = %u  replace \'\\n\'  to \'\\0\' \n",i);
            words[i] = '\0';
        }
        else // must have words[i] == '\0'
        {   
            printf("words[%u] == \'\\0\' \n",i);
            while (getchar() != '\n')// 獲取緩沖區(qū)下一個(gè)字符
                // continue;//作用是丟棄剩余的字符
                puts("continue");
        }

        // for(int j=0;j<STLEN;j++){
        //     printf(" words[%d] to int is %u \n",j,words[j]);
        // }
        puts(words);
        puts("------------------");        
    }
    puts("done");
    return 0;
}

下面是程序的輸出示例

Enter strings (empty line to quit):
------------------
12345678
words[8] replace '\n'  to '\0'
12345678

鍵盤輸入12345678,那么包括回車換行符共向程序緩沖區(qū)輸入了9個(gè)字符:12345678\n,fgets 全部獲得.
則存在數(shù)組中的為10個(gè)字符:12345678\n'\0',然后替換成了12345678'\0''\0'
------------------
123456789
words[9] == '\0'
123456789

輸入123456789\n, 緩沖區(qū)共10個(gè)字符, fgets獲得9個(gè)字符,則存在數(shù)組中的為123456789'\0'
此時(shí)還有個(gè)換行符\n存在緩沖區(qū),由getchar()取出,然后什么都不做進(jìn)入下一輪主循環(huán)
------------------
1234567890
words[9] == '\0'
continue
123456789

輸入1234567890\n, 緩沖區(qū)共11個(gè)字符, fgets獲得9個(gè)字符,則存在數(shù)組中的為123456789'\0'
此時(shí)還有個(gè)0和換行符在緩沖區(qū),getchar()先取出0打印continue然后取出換行符while結(jié)束,進(jìn)入下一輪主循環(huán)
------------------
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,712評論 0 5
  • PHP常用函數(shù)大全 usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() 函數(shù)從二進(jìn)制字符串對數(shù)據(jù)進(jìn)行解...
    上街買菜丶迷倒老太閱讀 1,496評論 0 20
  • 總結(jié)了一些開發(fā)中常用的函數(shù): usleep() //函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() //函數(shù)從二進(jìn)制...
    ADL2022閱讀 543評論 0 3
  • 在記憶深處可以清晰地看見許多事情,許多開始是模糊的樣子,后來慢慢變得清晰起來,但一切都只是泛黃的回憶。有人選擇用文...
    南有麋鹿0io閱讀 921評論 0 1
  • 英文部分及圖片來自“經(jīng)濟(jì)學(xué)人”雜志。譯文是個(gè)人學(xué)習(xí)、欣賞語言之用,謝絕轉(zhuǎn)載或用于任何商業(yè)用途。本人同意簡書平臺在接...
    開心果兒92閱讀 680評論 0 0

友情鏈接更多精彩內(nèi)容