一文掌握scanf的用法實(shí)例小結(jié)
scanf的用法
scanf的基本用法除了常規(guī)的輸入操作外還有一些特殊的用法,使用這些用法可以很方便的在輸入中讀取想要的數(shù)據(jù)
1.正常用法
1.1 int類(lèi)型
#include<stdio.h> int main() { int a = 0; scanf("%d", &a); printf("%d", a); } //輸入10 輸出10
1.2 float類(lèi)型
#include<stdio.h> int main() { float a = 1.1f; scanf("%f", &a); printf("%f", a); } //輸入浮點(diǎn)數(shù),輸出浮點(diǎn)數(shù),自動(dòng)補(bǔ)齊小數(shù)點(diǎn)后6位 //double同理
1.3 char類(lèi)型
#include<stdio.h> int main() { char a = 'm'; scanf("%c", &a); printf("%c", a); } //輸入字符,輸出字符,只需要控制打印的格式即可
1.4 字符串類(lèi)型
#include<stdio.h> int main() { char a[] = "abcdefg"; scanf("%s", a); printf("%s", a); } //輸入字符數(shù)組,輸出字符數(shù)組,但是輸入的字符大小不能超過(guò)數(shù)組大小
2.拓展用法
2.1 限制讀取的長(zhǎng)度
int 類(lèi)型
#include<stdio.h> int main() { int a = 10; scanf("%3d", &a); printf("%d", a); } //scanf("%3d", &a)限制輸入數(shù)據(jù)的長(zhǎng)度最多為3, //如果數(shù)據(jù)長(zhǎng)度大于3則只讀取前3位數(shù)據(jù), //如果輸入數(shù)據(jù)長(zhǎng)度小于3,因?yàn)橛谢剀?chē)符的存在也會(huì)結(jié)束輸入
char類(lèi)型不能限制,因?yàn)橹挥幸粋€(gè),但是數(shù)組字符串可以
#include<stdio.h> int main() { char a[10] = "ada"; scanf("%5s", a); printf("%s", a); } //同上所說(shuō),最多4位,不足4位也會(huì)因?yàn)閾Q行符結(jié)束
2.2 scanf匹配特定的字符
scanf匹配特定字符的格式為:%[xxx],[ ]包圍起來(lái)的是需要讀取的字符集合
2.2.1 只讀取想要的特定字符
char a[10]; scanf("%[abcd]", a);
%[abcd]表示只讀取字符abcd,遇到其它的字符就讀取結(jié)束,如果abcd字符在字符串的中間部分那么就不能正常讀取字符
測(cè)試1
abcd沒(méi)有順序要求,這四個(gè)字符什么順序均可以被錄入
測(cè)試2
只讀取到ab,遇到f結(jié)束
測(cè)試3
第一個(gè)字符是n結(jié)束輸入,字符串未初始化輸出為隨機(jī)值燙燙燙
2.2.2 只讀取所有的大小寫(xiě)字母
#include<stdio.h> int main() { char a[20]; scanf("%[a-zA-Z]", a); printf("%s", a); } //讀取大小寫(xiě)字母
測(cè)試1 >正常讀取(中間沒(méi)有特殊字符)
全讀進(jìn)去了
測(cè)試2 >中間有其他字符
遇到空格(其他字符),終止讀取,打印讀取到的abcF
下面做出改進(jìn),讓代碼可以打印空格
#include<stdio.h> int main() { char a[20]; scanf("%[a-z A-Z]", a); printf("%s", a); //其實(shí)就是在中間加一個(gè)空格,意思是空格也算匹配字符如果輸入中有空格符也會(huì)被正常讀取 }
這條語(yǔ)句scanf("%[a-z A-Z]", a)空格的位置不一定要放在中間,
可以放在最前面scanf("%[ a-zA-Z]", a),
也可以放在最后面,scanf("%[a-zA-Z ]", a)
輸入的字母中間除了空格還有制表符(兩者都算空白符),需要再加一個(gè)\t
測(cè)試3>有制表符tab
#include<stdio.h> int main() { char a[20]="abcd"; scanf("%[a-z \tA-Z ]", a); printf("%s", a); }
如果輸入的字母中間除了空格還有制表符(兩者都算空白符),
需要再加一個(gè)\t
2.2.3 只讀取數(shù)字[0-9]
#include<stdio.h> int main() { char a[20]="abcd"; scanf("%[0-9]", a); printf("%s", a); }
測(cè)試1> 正常讀取數(shù)字
測(cè)試2> 遇到其他符號(hào)終止
2.3 不匹配某些字符
不匹配某些字符只需要在[ ]內(nèi)的最前面加一個(gè)^就可以了,例如:
#include<stdio.h> int main() { char a[20]="abcd"; scanf("%[^0-9]", a); printf("%s", a); }
scanf函數(shù)可以用不匹配某些字符的寫(xiě)法來(lái)完全替代gets函數(shù)
#include<stdio.h> int main() { char a[20]="abcd"; scanf("%[^\n]", a); //讀取除換行符之外的所有字符(和gets的功能一模一樣) printf("%s", a); }
2.4 丟棄某些字符
scanf() 允許把讀取到的數(shù)據(jù)直接丟棄,不往變量中存放,
具體方法就是在 % 后面加一個(gè)* 例如:
#include<stdio.h> int main() { char a[20]="\0"; scanf("%*[a-z]"); scanf("%s", a); printf("%s", a); }
這種寫(xiě)法有一個(gè)問(wèn)題就是,在可讀入字符后面如果還有符合丟棄條件的字符也會(huì)讀取,而不會(huì)被丟棄,例如:
上面圖片表達(dá)的意思是,當(dāng)讀取到的字符串里面分段出現(xiàn)不滿(mǎn)足的字符,
則丟棄字符只發(fā)生在不滿(mǎn)足丟棄條件的第一個(gè)字符之前
說(shuō)人話(huà)就是
丟棄字符只發(fā)生一次
ABCL前面的abc確實(shí)被丟棄了,但是后面的沒(méi)有被丟棄,
當(dāng)丟棄發(fā)生到結(jié)束后,就不會(huì)再進(jìn)行丟棄,只發(fā)生一次,后面遇到要丟棄的字符也不會(huì)起到丟棄作用
到此這篇關(guān)于一文掌握scanf的用法的文章就介紹到這了,更多相關(guān)c++ scanf用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在C語(yǔ)言里單引號(hào)和雙引號(hào)的區(qū)別
這篇文章主要介紹了在C語(yǔ)言里單引號(hào)和雙引號(hào)的區(qū)別,本文通過(guò)代碼的實(shí)例和注釋的詳細(xì)的說(shuō)明了單引號(hào)和雙引號(hào)的概念與區(qū)別,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C++實(shí)現(xiàn)學(xué)生管理系統(tǒng)示例解析
這篇文章主要介紹了C++實(shí)現(xiàn)學(xué)生管理系統(tǒng)示例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08xxx_cast類(lèi)型轉(zhuǎn)換的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇xxx_cast類(lèi)型轉(zhuǎn)換的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12C++ throw關(guān)鍵字實(shí)現(xiàn)拋出異常和異常規(guī)范
本文主要介紹了C++ throw關(guān)鍵字實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08c++調(diào)用動(dòng)態(tài)庫(kù)LNK2019和LNK1120無(wú)法解析的外部命令
本文主要介紹了c++調(diào)用動(dòng)態(tài)庫(kù)LNK2019和LNK1120無(wú)法解析的外部命令, 出現(xiàn)這個(gè)錯(cuò)誤一般都是函數(shù)只找到聲明但沒(méi)有實(shí)現(xiàn),或者是少了什么鏈接庫(kù),下面就來(lái)解決一下2024-06-06C++數(shù)據(jù)結(jié)構(gòu)之實(shí)現(xiàn)鄰接表
這篇文章主要為大家詳細(xì)介紹了C++數(shù)據(jù)結(jié)構(gòu)之實(shí)現(xiàn)鄰接表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04