之前我有講過一個關於緩衝區,關於格式化輸入輸出的一片文章,但其實他們還有很多有趣的知識點,下面講講,怎麼讓scanf讀取你想要的數據,想不到吧。
指定讀取長度:
有通過書本學習的人會知道,printf() 是可以規定輸出長度的,比如%2d。
其實scanf也有這種用法,規定最長讀取多少的數據。比如%8d說明最長讀取8位,%8s,最長讀取8個字符
只讀取規定的字符:
比如scanf(“%[a]”,&n);就是%[xxx],[ ]包圍起來的是需要讀取的字符集合。例如,%[abcd]表示只讀取字符abcd,遇到其它的字符就讀取結束;注意,這裡並不強調字符的順序,只要字符在 abcd 範圍內都可以匹配成功,所以你可以輸入 abcd、dcba、ccdc、bdcca 等。
為了簡化字符集合的寫法,scanf() 支持使用連字符-來表示一個範圍內的字符,例如 %[a-z]、%[0-9] 等。這裡是根據ASCII碼的,因為再ASCII裡面字符0-9,a-z,A-Z,是排列在一起的。
不匹配某些字符
或者讀取 0~9 以外的所有字符,scanf() 允許我們在%[ ]中直接指定某些不能匹配的字符,具體方法就是在不匹配的字符前面加上^,例如:
%[^\\n]表示匹配除換行符以外的所有字符,遇到換行符就停止讀取;
%[^0-9]表示匹配除十進制數字以外的所有字符,遇到十進制數字就停止讀取。
丟棄讀取到的字符
在前面的代碼中,每個格式控制符都要對應一個變量,把讀取到的數據放入對應的變量中。其實你也可以不這樣做,scanf() 允許把讀取到的數據直接丟棄,不往變量中存放,具體方法就是在 % 後面加一個*,例如:
%*c; 說明讀取到字符就丟掉。
%*[a-z];說明讀取到小寫a到z就丟掉。
%*[^a-z];說明讀取到除a-z以外的東西全部丟掉
以上就是全部內容了,希望可以為你們有幫助,喜歡我文章的朋友,可以關注,轉發,收藏,評論。
另外有不知道怎麼學習,或者想有更多學習夥伴的,可以關注私信,c++,C語言或者編程。
閱讀更多 明江帶你學習編程 的文章