国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C getchar & putchar函數(shù)

這篇具有很好參考價(jià)值的文章主要介紹了C getchar & putchar函數(shù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

前言

1.getchar()函數(shù)

2.putchar()函數(shù)

3.清空緩沖區(qū)

3.1? ?緩沖區(qū)

3.2? ?場(chǎng)景

3.3? ?問題分析?

3.4? ?改進(jìn)(即清空緩沖區(qū))


前言

C語言的字符輸入函數(shù)getchar和輸出函數(shù)putchar功能介紹,以及緩沖區(qū)的簡(jiǎn)單認(rèn)識(shí)。

1.getchar()函數(shù)

1.int getchar(void)?函數(shù)從屏幕讀取下一個(gè)可用的字符,并把它返回為一個(gè)整數(shù)(返回字符的ASCII碼值)。這個(gè)函數(shù)在同一個(gè)時(shí)間內(nèi)只會(huì)讀取一個(gè)單一的字符。您可以在循環(huán)內(nèi)使用這個(gè)方法,以便從屏幕上讀取多個(gè)字符。

2.讀取失敗or遇到文件末尾是返回EOF。

ch = getchar() 和 scanf("%c", &ch); 語句效果相同

2.putchar()函數(shù)

1.int putchar(int c)?函數(shù)把字符(或者你想返回字符對(duì)應(yīng)的ASCII碼值)輸出到屏幕上,并返回相同的字符。這個(gè)函數(shù)在同一個(gè)時(shí)間內(nèi)只會(huì)輸出一個(gè)單一的字符。您可以在循環(huán)內(nèi)使用這個(gè)方法,以便在屏幕上輸出多個(gè)字符。

putchar(ch) 和 printf("%c", ch); 語句效果相同

3.清空緩沖區(qū)

3.1? ?緩沖區(qū)

1.什么是緩沖區(qū)?

用戶輸入的字符被收集并儲(chǔ)存在一個(gè)被稱為緩沖區(qū)的臨時(shí)存儲(chǔ)區(qū),按下Enter鍵后,程序才可以使用用戶輸入的字符。

2.為什么要有緩沖區(qū)?

首先,把若干字符作為一個(gè)塊進(jìn)行傳輸比逐個(gè)發(fā)送這些字符節(jié)約時(shí)間;

其次,如果用戶打錯(cuò)字符,可以直接通過鍵盤修正錯(cuò)誤,當(dāng)最后按下Enter鍵時(shí),傳輸?shù)氖钦_的輸入。

3.2? ?場(chǎng)景

#include<stdio.h>

int main()
{
	char password[20];
	printf("請(qǐng)輸入密碼->");
	scanf("%s", password); //數(shù)組名不需要使用取地址符&
	printf("請(qǐng)確認(rèn)Y/N:");
	int ch = getchar();
	if ('Y' == ch) {
		printf("確認(rèn)成功\n");
	}
	else {
		printf("確認(rèn)失敗\n");
	}
	return 0;
}

輸出結(jié)果:

C getchar & putchar函數(shù),從零開始的C語言生活,c語言,開發(fā)語言

3.3? ?問題分析?

1.從輸出結(jié)果我們可以看出:在我們輸入密碼之后,我們并未選擇確認(rèn),程序就直接認(rèn)定我們確認(rèn)失敗。

2.問題原因:scanf 與 getchar 都是從緩沖區(qū)中獲取內(nèi)容,但是關(guān)鍵來了:scanf函數(shù)在我們輸入完畢后按下Enter鍵(或者是空格)后方才停止輸入,此時(shí)scanf中的password拿走了密碼123456,但是后面你敲的回車鍵轉(zhuǎn)變成字符 ' \n ' ch = getchar()拿走,也就是說ch = '?\n '肯定不等于' Y ',所以直接輸出確認(rèn)失敗。

3.4? ?改進(jìn)(即清空緩沖區(qū))

1.由3.3分析可知,密碼確認(rèn)的失敗主要是因?yàn)間etchar讀取的? ' \n ' 導(dǎo)致,因此,我們需要清空緩沖區(qū),即scanf讀取后緩沖區(qū)剩余字符我們需要清空。

#include<stdio.h>

int main()
{
	char password[20];
	printf("請(qǐng)輸入密碼->");
	scanf("%s", password); //數(shù)組名不需要使用取地址符&
	getchar();      //這里我又加了一個(gè)getchar(),這樣\n就被去掉了
	printf("請(qǐng)確認(rèn)Y/N:");
	int ch = getchar();
	if ('Y' == ch) {
		printf("確認(rèn)成功\n");
	}
	else {
		printf("確認(rèn)失敗\n");
	}
	return 0;
}

2.緩沖區(qū)字符較多,如何清空?

①還是上面的代碼,比如輸入123456? abcd,在6后面我輸入了一個(gè)空格,此時(shí)scanf只讀取到6,則緩沖區(qū)還剩下abcd\n五個(gè)字符,但是getchar()一次只能去除一個(gè),則我們需要通過循環(huán)的方式,逐步去除緩沖區(qū)中所有的剩余字符。

②代碼演示:

#include<stdio.h>

int main()
{
	char password[20];
	printf("請(qǐng)輸入密碼->");
	scanf("%s", password); //數(shù)組名不需要使用取地址符&
	int ch = 0;
	while (ch = getchar() != '\n') {
		;
	}
	printf("請(qǐng)確認(rèn)Y/N:");
	ch = getchar();
	if ('Y' == ch) {
		printf("確認(rèn)成功\n");
	}
	else {
		printf("確認(rèn)失敗\n");
	}
	return 0;
}

運(yùn)行結(jié)果:

C getchar & putchar函數(shù),從零開始的C語言生活,c語言,開發(fā)語言

這樣我們就達(dá)到了一個(gè)清空緩沖區(qū)的效果!?文章來源地址http://www.zghlxwxcb.cn/news/detail-659007.html

到了這里,關(guān)于C getchar & putchar函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包