日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

C语言getchar的用法_getchar的用法(W3Schools)

發布時間:2023/12/15 综合教程 26 生活家
生活随笔 收集整理的這篇文章主要介紹了 C语言getchar的用法_getchar的用法(W3Schools) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • getchar

getchar的定義

MSDN中的解釋是從流中讀取一個字符

int ch = getchar()
//通過getchar獲取字符的ASCII碼值傳到ch里面存儲

這里注意:getchar獲取字符以后 通過ASCII碼值的形式存儲在ch里
為什么不用char ch?

getchar讀到的是一個int類型的數據 好處是返回值的時候非常方便

接下來我們再看一個示例:

int main()
{ 
   
    int ch = 0;
    while ((ch = getchar()) != EOF)  
    //這句話的意思是讀到了一個正常的字符
    { 
   
        putchar(ch);//給啥打印啥
    }
    return 0;
}

什么是EOF?

EOF是文件結束的標志,系統定義為-1,返回失敗和錯誤的時候都會返回-1

當我們執行以上程序,會一直讀取字符并且換行,以下做出解釋:
1、為什么會自動換行?
當我們在鍵盤上敲入a的時候,getchar并沒有獲取,而是在我們敲回車以后才會進行讀取 這個時候我們輸入的其實是兩個字符 一個是’a’,另一個是’\n’
2、如何中止這個程序?
輸入Ctrl+Z進行中止,這個時候我們的輸入會有EOF的標志
3、當我們進行輸入的時候,真實的情況是什么樣的?
當我們輸入的時候并不是鍵盤直接到getchar,而是中間有一個輸入緩沖區,getchar一直在等待緩沖區里的內容,正是有了緩沖區的存在,才會出現有1的問題
4、我們如何清空緩沖區以免對后續操作造成影響呢?
我們作出以下研討:

情景模擬:我們需要設計一個簡易的登錄驗證密碼過程

int main()
{ 
   
    //假設密碼是一個字符串
    char password[20] = { 
    0 };
    printf("請輸入密碼:>");
    scanf("%s", password);//abc
    printf("請確認密碼(Y/N):>");
    int ret = getchar();
    if ('Y' == ret)
    { 
   
        printf("Yes\n");
    }
    else
    { 
   
        printf("No\n");
    }
    return 0;
}
//當我們輸入密碼以后,并沒有出現我們意料中的確認密碼輸入Y或者N的情況
//這個時候就是緩沖區出現問題

解釋:假設密碼為abc 程序沒能按想象的那樣輸入Y或者N
是因為 scanf只讀取abc不會讀取\n getchar最后拿到的是Y和\n或者N和\n

我們對代碼進行改進:

int main()
{ 
   
    //假設密碼是一個字符串
    char password[20] = { 
    0 };
    printf("請輸入密碼:>");
    scanf("%s", password);//abc
    getchar();//讀取了\n
    printf("請確認密碼(Y/N):>");
    int ret = getchar();
    if ('Y' == ret)
    { 
   
        printf("Yes\n");
    }
    else
    { 
   
        printf("No\n");
    }
    return 0;
}
//再次運行一次,輸入abc def

表面上看 我們輸入abc的時候確實成功跑起來了
但是治標不治本 我們輸入abc def的時候
getchar讀到空格就不讀了 第二次getchar拿到的是空格 還剩def\n
多一個空格 程序又出錯了 所以這個時候我們需要用到剛剛的代碼,進行稍微的修改可以很好的清空緩沖區

int main()
{ 
   
    //假設密碼是一個字符串
    char password[20] = { 
    0 };
    printf("請輸入密碼:>");
    scanf("%s", password);//abc def 
    //scanf的特性是只讀到空格的地方就停止

    int ch = 0;
    while ((ch = getchar() != '\n'))
    { 
   
        ;
    }

    getchar();//讀取了\n
    printf("請確認密碼(Y/N):>");
    //這個時候緩沖區就只有Y或者N

    int ret = getchar();

    if ('Y' == ret)
    { 
   
        printf("Yes\n");
    }
    else
    { 
   
        printf("No\n");
    }
    return 0;
} 

總結

以上是生活随笔為你收集整理的C语言getchar的用法_getchar的用法(W3Schools)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。