C語(yǔ)言萌新如何使用scanf函數(shù)?-創(chuàng)新互聯(lián)

🐎作者的話

創(chuàng)新互聯(lián)自2013年創(chuàng)立以來(lái),是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元義縣做網(wǎng)站,已為上家服務(wù),為義縣各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108

如果你搜索輸入輸出函數(shù),那么你會(huì)看到輸入輸出流、Turbo標(biāo)準(zhǔn)庫(kù)、標(biāo)準(zhǔn)輸出端、stdout什么什么亂七八糟的,作為一個(gè)萌新,哪懂這些?

本文介紹萌新在前期的學(xué)習(xí)中,常用的輸入輸出函數(shù)及其功能~


跳躍式目錄
    • 輸入函數(shù)scanf介紹
    • scanf的作用
    • scanf參數(shù)解釋
    • 寬度參數(shù)
    • 星號(hào)忽略符
    • 輸入格式問(wèn)題
    • scanf的返回值
    • VS中如何使用scanf


輸入函數(shù)scanf介紹

函數(shù)原型:int scanf(const char * str,地址1,地址2,地址3,地址…)

沒(méi)錯(cuò),這就是對(duì)于我們C語(yǔ)言新手來(lái)說(shuō)的scanf函數(shù)原型,其第一個(gè)參數(shù)是一個(gè)const修飾的字符串,其他參數(shù)都是地址。

scanf的作用

scanf是用來(lái)輸入數(shù)據(jù)的,你固然可以在代碼的編輯器上輸入數(shù)據(jù),但是如果你在程序運(yùn)行以后想要輸入一個(gè)數(shù)據(jù),那就需要用到scanf。

scanf參數(shù)解釋

對(duì)于第一個(gè)參數(shù)字符串str,你既可以直接用雙引號(hào)引著放到scanf里面,也可以用字符數(shù)組存儲(chǔ)后放入數(shù)組的首地址,像這樣:

int main()
{char str[] = "12345";
	scanf(str);
	scanf("12345");
	return 0;
}

這兩種存放方法都是可以的。

但是,若想要輸入數(shù)據(jù),就要在str中加入控制符,其格式是一個(gè)%號(hào)加上1個(gè)或2個(gè)字母,比如說(shuō):%d,%u,%c等等;

每種字母都對(duì)應(yīng)著你要輸入不同類型的數(shù)據(jù),詳細(xì)請(qǐng)看下表:

%字母類型
%dsigned int
%uunsigned int
%cchar
%o八進(jìn)制unsigned int
%x(%X)十六進(jìn)制unsigned int
%s字符串
%p地址(指針)
%hdshort
%ldlong

每多加一個(gè)控制符,就代表著你需要多一個(gè)變量來(lái)儲(chǔ)存你輸入的數(shù)據(jù),而scanf后面的參數(shù)就是用來(lái)存儲(chǔ)數(shù)據(jù)的變量的地址,像這樣:

int main()
{int a = 0;
	char b = 0;

	scanf("%d %c", &a, &b);


	printf("%d %c", a, b);
	return 0;
}

效果圖:
在這里插入圖片描述
可以看到,我把21和A分別放到a和b里面。

注意:不同類型的控制符是不同存儲(chǔ)數(shù)據(jù)方式,比如說(shuō):如果你用%s讀取一個(gè)int型的數(shù)據(jù),那么計(jì)算機(jī)會(huì)把你輸入的這個(gè)數(shù)據(jù)當(dāng)成字符串來(lái)存儲(chǔ),像這樣:

int main()
{int a = 0;

	scanf("%s", &a);
	return 0;
}

效果圖:
在這里插入圖片描述

可以看到,我輸入了123,而計(jì)算機(jī)把這一串當(dāng)成字符串來(lái)處理,其中31,32,33分別是字符‘1’,字符‘2’,字符‘3’的ASCII碼十六進(jìn)制表示形式。

寬度參數(shù)

如果你在控制符的%和字母之間輸入一個(gè)數(shù)字,這個(gè)數(shù)字決定了在讀入數(shù)據(jù)時(shí)被允許讀入的大寬度,像這樣:

int main()
{int a = 0;
	scanf("%5d", &a);
	printf("%d", a);
	return 0;
}

效果圖:
在這里插入圖片描述
可以看到,a里面只存儲(chǔ)了12345。

星號(hào)忽略符

星號(hào)省略符(博主顧義思名起的名字),其作用是加上這個(gè)星號(hào)可以忽略一個(gè)字符的讀入,像這樣:

int main()
{int a = 0;
	int b = 0;
	scanf("%*d %d", &a, &b);

	return 0;
}

可以看到,第一個(gè)控制符里面加了星號(hào),那么你在輸入數(shù)據(jù)時(shí)第一個(gè)輸入的數(shù)據(jù)就會(huì)被忽略。

效果圖及詳解:
在這里插入圖片描述

在這里插入圖片描述
我們輸入12和13,其分別對(duì)對(duì)應(yīng)第一個(gè)控制符和第二個(gè)控制符,第一個(gè)控制符讀入了12,但是它被忽略了,于是下一個(gè)數(shù)據(jù)13就被讀入了a里面,b因?yàn)闆](méi)有被讀入數(shù)據(jù),所以還是原來(lái)的值。

輸入格式問(wèn)題

在輸入時(shí),除了把控制符換成數(shù)據(jù)以外,必須嚴(yán)格按照str的格式輸入,像這樣:

int main()
{int age = 0;
	scanf("my age is %d", &age);


	return 0;
}

look,我在控制符之前加了一串字符串,那么在輸入時(shí),必須嚴(yán)格按照這一串來(lái)輸入,即你必須把這一串在打一遍。
效果圖:
在這里插入圖片描述

  • 上圖是我們直接輸入13,age的值并沒(méi)有發(fā)生變化。

在這里插入圖片描述

  • 上圖我們按照格式輸入,age才有了變化。

這固然是有利有弊的,而且很明顯弊大于利。

利: 比如有一堆同學(xué),他們的學(xué)號(hào)都是2023開(kāi)頭的,那么讀入數(shù)據(jù)的時(shí)候就可以在控制符前面加上一個(gè)2023,這樣如果有2022級(jí)的學(xué)生輸入學(xué)號(hào)時(shí),就可以提示輸入錯(cuò)誤;亦或者你單純地想讓用戶多打一點(diǎn)字,讓小學(xué)生練習(xí)打字也許很不錯(cuò)。
在這里插入圖片描述
弊: 這樣加格式會(huì)讓用戶的輸入更加繁瑣,輸入會(huì)變得不簡(jiǎn)潔。

scanf的返回值

開(kāi)門見(jiàn)山,scanf的返回值就是正確讀入數(shù)據(jù)的個(gè)數(shù),像之前的代碼:

int main()
{int a = 0;
	int b = 0;
	int tmp=scanf("%*d %d", &a, &b);
	printf("%d", tmp);
}

這里的第一個(gè)控制符讀入的數(shù)據(jù)被我們忽略了,所以如果打印tmp,正確輸入的數(shù)據(jù)應(yīng)該只有一個(gè)。
在這里插入圖片描述
其次,如果輸入錯(cuò)誤或輸入文件結(jié)束符(Ctrl+z),則返回EOF(-1)。

VS中如何使用scanf

在這里插入圖片描述
你在VS中使用scanf時(shí)可能會(huì)遇到這一串錯(cuò)誤。
你可以使用scanf_s來(lái)替換scanf,不過(guò)要多加一個(gè)參數(shù),表示數(shù)據(jù)占用的字節(jié)數(shù)。
這兩者的區(qū)別僅僅在于安全性。
如果你想在VS中使用scanf,只需要在源文件第一行加入這一串:

#define _CRT_SECURE_NO_WARNINGS 1

這樣就可以消除報(bào)錯(cuò)了。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

文章名稱:C語(yǔ)言萌新如何使用scanf函數(shù)?-創(chuàng)新互聯(lián)
文章來(lái)源:http://bm7419.com/article26/hshcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、標(biāo)簽優(yōu)化、定制開(kāi)發(fā)、品牌網(wǎng)站建設(shè)、微信公眾號(hào)、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作