程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 一起talk C栗子吧(第一百七十七回:C語言實例

一起talk C栗子吧(第一百七十七回:C語言實例

編輯:關於C

各位看官們,大家好,上一回中咱們說的是字符和字符串輸入函數的例子,這一回咱們繼續說該例子。閒話休提,言歸正轉。讓我們一起talk C栗子吧!


看官們,我們在上一回中介紹了字符和字符串輸入函數的用法,満篇的理論,不少看官聽著聽著就睡著了。這一回中我們要把理論應用於實踐中,讓我們一起動手去實踐吧。

接下來,我們將通過具體的代碼來說明如何使用字符輸入函數,以及使用時的注意事項:

int main()
{
    char ch;
    int count = 0;

    puts("please input a charactor");
    while( EOF != ( ch = fgetc(stdin)) )
    {
        printf("input is %c \n",ch);
        if( ++count > 5 )
            break;
    }
    printf("count is %d \n",count);

    return 0;
}

從上面 的代碼中可以看到我們通過fgetc函數從流中獲取字符,不過這個流比較特殊,它是我們經常使用的標准輸入流。為了驗證我們是否從流中獲取到了字符,我們輸出了從流中獲取的字符。

編譯並且運行該程序,可以得到以下的運行結果,請大家參考:

please input a charactor
a                  //輸入a然後按下回車鍵
input is a 
input is 

b                  //輸入b然後按下回車鍵
input is b 
input is 

c                  //輸入c然後按下回車鍵
input is c 
input is 

count is 6 

結合上面的源代碼和程序運行結果,我們可以看到,程序中不停地使用fgetc函數從標准輸入中獲取字符,直到獲取六個字符後才停止。可是我們運行時只輸入了a,b,c三個字符,然後程序就停止運行了,這是為什麼呢?

因為fgetc函數讀取字符後還讀取了回車符,它一共讀取了三個回車符,再加上我們輸入的三個字符,正好是六個字符。大家現在明白其中的原因了吧,另外兩個字符輸入函數:getc和getchar也有同樣的操作,我們就不舉例子了,請大家自己動手去驗證一下,它們是不是和fgetc有同樣的結果。

介紹完字符輸入函數後,我們將通過具體的代碼來說明如何使用字符串輸入函數,以及使用時的注意事項:

int main()
{
    char buf[BUFSIZ] = {'\0',};
    char *p = NULL;

    puts("please input some charactors");
    if(NULL != gets(buf) )
        puts(buf);

    p = buf;
    while(*p != '\0')
        putchar(*p++);

    putchar('\n');

    puts("please input some charactors");
    if(NULL != fgets(buf,BUFSIZ,stdin) )
        puts(buf);

    p = buf;
    while(*p != '\0')
        putchar(*p++);

    return 0;
}

從上面 的代碼中可以看到我們通過fgets函數從流中獲取字符串,不過這個流比較特殊,它是我們經常使用的標准輸入流。在這個時候,它和gets函數具有相同的功能。為了驗證我們是否從流中獲取到了字符串,我們輸出了從流中獲取的字符串。

編譯並且運行該程序,可以得到以下的運行結果,請大家參考:

please input some charactors
a b      //輸入a空格b,然後按下回車鍵
a b      //這是puts函數輸出的結果,該函數自動輸出換行符
a b      //這是通過while循環中putchar函數輸出的結果,換行符是循環後面的單獨輸出的
please input some charactors
a b      //輸入a空格b,然後按下回車鍵
a b      //這是puts函數輸出的結果,這裡的換行是字符串中自帶的換行符
                        //這裡的換行是puts函數自動輸出的換行符
a b      //這是通過while循環中putchar函數輸出的結果,換行符也是循環中輸出的

結合上面的代碼,我們可以看到,使用標准輸入流的fgets函數和gets函數具有相同的功能,不同之處在於gets沒有把換行符讀取到字符串中,而fgets函數則把換行符讀取到了字符串中。

此外,我們沒有演示函數gets的緩沖區溢出功能,我們使用了標准庫提供的BUFSIZ宏,該值比較大,簡單的字符串不會引起緩沖區溢出,大家可以調整buf的大小,然後輸入比buf容量大的字符串,這時會發生緩沖區溢出。

看官們,我把例子中的代碼整理到了一個文件中,並且把該文件放到了我的資源中,大家可以下載使用。

各位看官,關於字符和字符串輸入函數的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved