怎麼讓scanf指定讀取數據?

怎麼讓scanf指定讀取數據?

之前我有講過一個關於緩衝區,關於格式化輸入輸出的一片文章,但其實他們還有很多有趣的知識點,下面講講,怎麼讓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語言或者編程。


分享到:


相關文章: