欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言中g(shù)etchar的用法以及實例解析

 更新時間:2022年03月03日 10:43:16   作者:ww?here  
getchar()是stdio.h中的庫函數(shù),它的作用是從stdin流中讀入一個字符,下面這篇文章主要給大家介紹了關(guān)于C語言中g(shù)etchar的用法以及實例的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

getchar解析

一、getchar的返回類型及作用機制

getchar——讀取字符的函數(shù)

int getchar(void)

返回類型為int,參數(shù)為void.

有人可能會有疑惑,getchar既然是讀取字符的,為什么返回類型是int呢?

1、getchar其實返回的是字符的ASCII碼值(整數(shù))。

2、getchar在讀取結(jié)束或者失敗的時候,會返回EOF。

EOF意思是end of file,本質(zhì)上是-1.

二、根據(jù)一段代碼初步了解

下面我們一起來看看下面這段代碼什么意思

#include<stdio.h>
int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		putchar(ch);
	}

	return 0;
}

意思是

getchar先讀取一個字符放到ch里面去,如果這個字符不等于EOF,就進入循環(huán),打印這個字符。當getchar讀到文件末尾或者結(jié)束時,它會返回一個EOF,此時結(jié)束循環(huán)。
我們來運行試一下

輸入A,輸出A;輸入b,輸出b…

當我們想要結(jié)束時,輸入ctrl+Z,再按回車即可。

注意,如果上面的代碼不用while循環(huán)的話,輸入123,putchar()只會輸出1。因為一個getchar一次只能讀取一個字符。

三、實例(“輸入密碼”)進一步了解

1、代碼達不到理想效果

我們再來看看下面這段代碼

#include<stdio.h>
int main()
{
	char password[20] = {0};
	printf("請輸入密碼:>");
	
	scanf("%s", password);

	printf("請確認密碼(Y/N):>");
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("確認成功\n");
	}
	else
	{
		printf("確認失敗\n");
	}
	return 0;
}

按理說,我們是想要輸入密碼,然后再輸入N或者Y,根據(jù)我們輸入的是N還是Y打印“確認成功”或“確認失敗”。

我們來運行一下,看看是否是這樣

可以看到,我們還沒有輸入Y或N,他就立馬跳出來了一個“確認失敗”

為什么會是這樣呢?

請?zhí)砑訄D片描述

(1)原理詳解

我們來看看它其中的原理:

scanf和getchar都是輸入函數(shù),它們都是從鍵盤上來讀取我們的數(shù)據(jù),但它們不是直接從鍵盤上來讀取我們的數(shù)據(jù)。它們和鍵盤之間有一個區(qū)域叫緩沖區(qū)。

輸入函數(shù)先來看緩沖區(qū)中是否有數(shù)據(jù),如果有,它直接就拿走了,不需要從鍵盤輸入,如果緩沖區(qū)什么都沒有,則需要從鍵盤輸入,再拿走。

明白這個道理后,我們回到上面那串代碼。

最開始緩沖區(qū)里沒有東西,所以我們這行代碼

scanf("%s", password);

就是從鍵盤輸入密碼,我們輸入123456。為了讓123456放進去,我們還敲了一個回車,所以緩沖區(qū)里為

123456\n

接下來就是scanf來讀緩沖區(qū)里的字符串了,scanf讀取的方式是讀取\n之前的內(nèi)容,所以讀取的是123456.
printf("請確認密碼(Y/N):>");后,就是下面這行代碼:

int ch = getchar();

getchar用來接收字符,

getchar看到緩沖區(qū)中有數(shù)據(jù)(\n),直接取走,不需要從鍵盤輸入。自然也就出現(xiàn)了我們上面運行結(jié)果的那一幕:還沒輸入N或Y,就立馬跳出“確認失敗”了。

(2)解決措施

那么我們怎么解決這個問題呢?

很自然就能想到需要先把緩沖區(qū)里清空

那我們就在前面加一個getchar把緩沖區(qū)中的“\n”給清理掉。

即代碼變?yōu)?/p>

#include<stdio.h>
int main()
{
	char password[20] = {0};
	printf("請輸入密碼:>");
	scanf("%s", password);
	
	getchar();//把緩沖區(qū)中的\n清理掉
	
	printf("請確認密碼(Y/N):>");
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("確認成功\n");
	}
	else
	{
		printf("確認失敗\n");
	}
	return 0;
}

運行一下即可發(fā)現(xiàn),現(xiàn)在能夠得到我們的理想結(jié)果。

2、輸入的密碼中有空格

不過又有一個問題,當我們輸入密碼為123456 789時(中間有一個空格),還沒等我們輸入N或Y,又立馬跳出了“確認失敗”。
這又是怎么回事呢?我們一起來看看

(1)原理詳解

首先緩沖區(qū)里沒有東西,我們需要通過鍵盤輸入密碼123456 789,

然后scanf就來取緩沖區(qū)中的數(shù)據(jù),當它讀到空格的時候,它就不再讀了(這是scanf的一個作用性質(zhì))。

所以scanf就只取走了123456,而緩沖區(qū)中還剩下(空格) 789\n。

再往下,運行到getchar();這行代碼,然而這里只有一個getchar,它只能讀取一個字符,也就是只讀了空格,緩沖區(qū)中還剩789\n。

再往下,就是我們的這行代碼int ch = getchar();

getchar()一來就取走了緩沖區(qū)中的7,根本不需要我們從鍵盤輸入N或Y。運行時自然它就自動跳出了“確認錯誤”。

(2)解決措施

所以我們需要把緩沖區(qū)中的東西先全部清走。

那我們就用一個循環(huán),只要沒讀到\n,我們就一直用getchar讀。

//把緩沖區(qū)中的內(nèi)容全讀走
	while ( getchar() != '\n')
	{
		;
	}

整段代碼如下:

#include<stdio.h>
int main()
{
	char password[20] = {0};

	printf("請輸入密碼:>");
	scanf("%s", password);

	//把緩沖區(qū)中的內(nèi)容全讀走
	while ( getchar() != '\n')
	{
		;
	}
	printf("請確認密碼(Y/N):>");
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("確認成功\n");
	}
	else
	{
		printf("確認失敗\n");
	}

	return 0;
}

運行一下

是我們想要的效果。

以上就是關(guān)于getchar的用法的實例解析。

總結(jié)

到此這篇關(guān)于C語言中g(shù)etchar的用法以及實例的文章就介紹到這了,更多相關(guān)C語言中g(shù)etchar用法實例內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c++中#include &lt;&gt;與#include""的區(qū)別詳細解析

    c++中#include &lt;&gt;與#include""的區(qū)別詳細解析

    <>先去系統(tǒng)目錄中找頭文件,如果沒有在到當前目錄下找。所以像標準的頭文件 stdio.h、stdlib.h等用這個方法
    2013-10-10
  • 詳解C語言中的Static關(guān)鍵字

    詳解C語言中的Static關(guān)鍵字

    這篇文章主要為大家介紹了C語言中Static關(guān)鍵字,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • C語言制作簡易金山打字通功能的代碼

    C語言制作簡易金山打字通功能的代碼

    今天小編就為大家分享一篇關(guān)于C語言制作簡易金山打字通功能的代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C++11?std::transform函數(shù)使用小結(jié)

    C++11?std::transform函數(shù)使用小結(jié)

    std::transform是C++標準庫中的一個算法,它用于對輸入范圍內(nèi)的元素進行操作,并將結(jié)果存儲在輸出范圍內(nèi),本文就介紹了std::transform函數(shù)的具體使用,感興趣的可以了解一下
    2023-09-09
  • 利用Matlab繪制有趣圖像的示例代碼

    利用Matlab繪制有趣圖像的示例代碼

    這篇文章主要為大家總結(jié)了一些利用Matlab繪制的有趣好看的圖像的示例代碼。文中的示例代碼簡潔易懂,感興趣的小伙伴可以動手試一試
    2022-03-03
  • C++如何獲取鼠標點擊位置

    C++如何獲取鼠標點擊位置

    這篇文章主要介紹了C++如何獲取鼠標點擊位置問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Qt自定義控件實現(xiàn)線條型加載條

    Qt自定義控件實現(xiàn)線條型加載條

    這篇文章主要為大家詳細介紹了Qt自定義控件實現(xiàn)線條型加載條,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C語言實現(xiàn)簡單通訊錄

    C語言實現(xiàn)簡單通訊錄

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡易通訊錄,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C++實現(xiàn)尋找最低公共父節(jié)點的方法

    C++實現(xiàn)尋找最低公共父節(jié)點的方法

    這篇文章主要介紹了C++實現(xiàn)尋找最低公共父節(jié)點的方法,是數(shù)據(jù)結(jié)構(gòu)中二叉樹的一個經(jīng)典算法,有一定的借鑒價值,需要的朋友可以參考下
    2014-09-09
  • C語言簡單實現(xiàn)銀行ATM存取款功能

    C語言簡單實現(xiàn)銀行ATM存取款功能

    這個是大一時期寫的。大四的時候整理了一下(本人C語言學的也不太好)??隙ê芏嗖蛔愫痛嬖诼┒吹牡胤?、僅供借鑒、僅供借鑒,代碼中有大量注釋,新手看起來也沒有困難
    2021-11-11

最新評論