(1) 首先看乙個程式 :
發現了乙個問題: 「scanf()函式吃掉了後面的資料」 .
(2) scanf()函式接收資料時
, 遇到以下情況將會結束乙個資料的輸入
:① 遇空格、回車、跳格鍵 .
② 遇寬度結束 .
③ 遇非法輸入 .
*所以上面的例子中遇到空格
scanf()
函式將認為是對
str1
的賦值結束
, 並忽略後面的」love you」, 不過」love you」還在鍵盤緩衝區中,
(3) 測試程式 :
#include
#include
int main()
char str1[90];
char str2[90];
char str3[90];
scanf("%s",&str1);
printf("%s\n",str1);
sleep(5000); // 要程式暫停
5000
毫秒scanf("%s",&str2); // 不是用來輸入的
, 是讓程式對鍵盤緩衝區再掃瞄
scanf("%s",&str3); // 不是用來輸入的
, 是讓程式對鍵盤緩衝區再掃瞄
printf("%s\n",str2);
printf("%s\n",str3);
return 0;
當輸入」i love you」時, 程式會先輸出」i」, 間隔
5000
毫秒後程式會繼續輸出」love you」 .
(輸入」i love you」開始只會輸出」i」)
(等待5000
毫秒後,
程式將中輸出」love you」)
* 鍵盤的所有輸入都在快取中
, 只是
scanf
函式將第乙個空格作為資料賦值的結束符號
, 後面再使用多個
scanf
對緩衝區進行掃瞄的時候
, 就能將所有的緩衝資料獲取
, 並賦給變數
.(4) 順便提提清空緩衝區操作 :
① fflush(stdin);
② rewind(stdin);
* 如果將上面這兩個的任意乙個放到
sleep(5000)
後面,
則程式只會輸出」i」, 後面兩個
scanf()
不會再掃瞄緩衝區的資料了
, 只會等待使用者的輸入兩次才能結束程式
.(5) 「% 掃瞄字元集合
」 :a. 該字符集是scanf的格式控制的一種
, 類似」%d」、」%c」, 括號中就為需要匹配
的內容, 比如」%[a-z]」即為匹配小寫英文本母;
需要注意的是這樣的匹配只是從輸入的所有字元中從前向後找, 從第乙個字元
起只有符合匹配要求才會繼續找, 遇到不符合要求則直接結束
scanf
函式,
所以只要一開始就不符合則相當於沒輸入 .
b. 還可使用」^」, 使用」^」的作用是限制獲取的終點, 如」%[^a123]」則如果輸
入」sdfddgadasdsada123sdfdsfjsdjf」, 則匹配後只會將」sdfddg」作為輸入的內容, 所
以可知作用是將中括號中的任乙個字元作為結束的終點 :
該格式最大的用處就是解決上面所出現的」scanf吃掉空格」現象, 既可以限制程
序在某個字元前的所有字元作為乙個資料的值 :
C語言 scanf 函式
scanf 函式是用來從外部輸入裝置向計算機主機輸入資料的。scanf 函式的一般格式 案例 已知圓柱體的底半徑radius 1.5,高high 2.0,求其體積。main 案例 已知圓柱體的底半徑為radius,高為high,求其體積。功能 說明函式scanf 的格式及作用。main 程式執行結果...
C語言scanf函式
四 注意事項 編寫程式的主要目的就是為了處理資料。資料從 來?資料的 有很多種方式,如從磁碟檔案中讀取資料 從資料庫中讀取資料 從網頁中抓取資料等,還有一種原始的方式就是從鍵盤輸入資料。在c語言中,有三個函式可以從鍵盤獲得使用者輸入。getchar 輸入單個字元,儲存到字元變數中。gets 輸入一行...
C語言 scanf函式
1 scanf函式,是乙個標準的輸入函式 是乙個阻塞式的函式 當使用scanf的時候,程式會等待使用者輸入,如果不輸入內容,程式不再往下執行 作用 接收從鍵盤輸的的內容 2 使用格式 對比printf printf 格式控制字串 變數列表 scanf 格式控制字串 變數的 位址 列表 printf ...