🐎作者的話
創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,是專業(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)庫、標(biāo)準(zhǔn)輸出端、stdout什么什么亂七八糟的,作為一個(gè)萌新,哪懂這些?
本文介紹萌新在前期的學(xué)習(xí)中,常用的輸入輸出函數(shù)及其功能~
函數(shù)原型:int scanf(const char * str,地址1,地址2,地址3,地址…)
沒錯(cuò),這就是對(duì)于我們C語言新手來說的scanf函數(shù)原型,其第一個(gè)參數(shù)是一個(gè)const修飾的字符串,其他參數(shù)都是地址。
scanf的作用scanf是用來輸入數(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è)字母,比如說:%d,%u,%c等等;
每種字母都對(duì)應(yīng)著你要輸入不同類型的數(shù)據(jù),詳細(xì)請(qǐng)看下表:
%字母 | 類型 |
---|---|
%d | signed int |
%u | unsigned int |
%c | char |
%o | 八進(jìn)制unsigned int |
%x(%X) | 十六進(jìn)制unsigned int |
%s | 字符串 |
%p | 地址(指針) |
%hd | short |
%ld | long |
每多加一個(gè)控制符,就代表著你需要多一個(gè)變量來儲(chǔ)存你輸入的數(shù)據(jù),而scanf后面的參數(shù)就是用來存儲(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ù)方式,比如說:如果你用%s讀取一個(gè)int型的數(shù)據(jù),那么計(jì)算機(jī)會(huì)把你輸入的這個(gè)數(shù)據(jù)當(dāng)成字符串來存儲(chǔ),像這樣:
int main()
{int a = 0;
scanf("%s", &a);
return 0;
}
效果圖:
可以看到,我輸入了123,而計(jì)算機(jī)把這一串當(dāng)成字符串來處理,其中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)省略符(博主顧義思名起的名字),其作用是加上這個(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)闆]有被讀入數(shù)據(jù),所以還是原來的值。
在輸入時(shí),除了把控制符換成數(shù)據(jù)以外,必須嚴(yán)格按照str的格式輸入,像這樣:
int main()
{int age = 0;
scanf("my age is %d", &age);
return 0;
}
look,我在控制符之前加了一串字符串,那么在輸入時(shí),必須嚴(yán)格按照這一串來輸入,即你必須把這一串在打一遍。
效果圖:
這固然是有利有弊的,而且很明顯弊大于利。
利: 比如有一堆同學(xué),他們的學(xué)號(hào)都是2023開頭的,那么讀入數(shù)據(jù)的時(shí)候就可以在控制符前面加上一個(gè)2023,這樣如果有2022級(jí)的學(xué)生輸入學(xué)號(hào)時(shí),就可以提示輸入錯(cuò)誤;亦或者你單純地想讓用戶多打一點(diǎn)字,讓小學(xué)生練習(xí)打字也許很不錯(cuò)。
弊: 這樣加格式會(huì)讓用戶的輸入更加繁瑣,輸入會(huì)變得不簡潔。
開門見山,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時(shí)可能會(huì)遇到這一串錯(cuò)誤。
你可以使用scanf_s來替換scanf,不過要多加一個(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ù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
文章名稱:C語言萌新如何使用scanf函數(shù)?-創(chuàng)新互聯(lián)
文章來源:http://muchs.cn/article26/hshcg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、標(biāo)簽優(yōu)化、定制開發(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)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容