C語言scanf 與緩衝區

2021-09-05 09:43:55 字數 1453 閱讀 2259

scanf函式返回值

正整數,表示正確輸入引數的個數。例如執行 scanf(「%d %d」, &a, &b);

如果使用者輸入」3 4」,可以正確輸入,返回2(正確輸入了兩個變數);

如果使用者輸入」3,4」,可以正確輸入a,無法輸入b,返回1(正確輸入了乙個變數)。

0,表示使用者的輸入不匹配,無法正確輸入任何值。如上例,使用者如果輸入」,3 4」,返回0。

eof,這是在stdio.h裡面定義的常量(通常值為-1),表示輸入流已經結束。在windows下,使用者按下ctrl+z(會看到乙個^z字元)再按下回車(可能需要重複2次),就表示輸入結束;linux/unix下使用ctrl+d表示輸入結束。

關於緩衝區問題

用fflush(stdin)命令強行重新整理輸入快取,丟棄輸入快取中的資料,此種方法在windows下使用有效,linux無效

char ch;

fflush(stdin); //不管快取中有沒有資料,強行清除

ch=getchar(); //這裡會等待使用者輸入乙個字元

前面有讀資料操作,現在要執行讀字元操作,則可用getchar()來吃掉前面的回車確認
int i;

char ch;

scanf("%d", &i ); //讀乙個整數,回車確認

getchar(); //先吃掉回車確認符,這兩句,效果同下一方法的那一句

ch=getchar(); //這裡會等待使用者輸入乙個字元

int i;

char ch;

scanf("%d%*c", &i ); //%*c表示讀乙個字元,並不賦值給任何變數

ch=getchar(); //這裡不會讀到回車符

其他:

scanf接收包含空格的字串

char str[80];

scanf("%[^\n]",str); //讀到'\n'結束讀取

//讀到'\n'結束讀取,存入str,再拋棄乙個字元

scanf("%[^\n]%*c",str);

//讀到'\n'結束讀取,並將其讀到的資料拋棄,然後再拋棄乙個字元(這個字元是'\n')

//此時快取中不存在任何字元

scanf("%*[^\n]%*c");

int c;

while((c=getchar())!='\n'&&c!=eof);

//讀取乙個字元,直到是\n或者是eof停止

//等價於

scanf("*[^\n]");

//直到遇到字元a停止讀取,

//捨棄a

//讀取將a後的乙個字元存入變數c

scanf("%*[^a]%*c%c",&c);

C語言中scanf與鍵盤緩衝區

1.螢幕輸入與鍵盤緩衝區儲存 根據ascii表儲存ascii值。若輸入97 回車鍵,則緩衝區儲存的是39h,37h,0ah.2.整型格式輸入 scanf d a 過程 scanf按照 d格式最多掃瞄buffer中前4個位元組。如果在讀取buffer前四個位元組中沒有遇到回車符,那麼將4個位元組按照 ...

C語言中scanf函式與輸入緩衝區

樣例 於演算法競賽入門經典第一章實驗部分的內容,經過測試發現scanf函式對於整形資料在讀入時會過濾掉 空格符 換行符 和 水平製表符。按照提示,如果b的值非法,比如說輸入乙個字元 s 那麼會出現什麼結果呢?void scanf buffer void phase 1 輸入的兩個數均為合法的int型...

關於scanf 緩衝區

c語言中的輸入函式 包括scanf,getchar等 在接收鍵盤輸入時,把輸入放在了 輸入緩衝區 當scanf getchar 做輸入操作時,以回車符作為結束標誌,並把回車符 n 包含在輸入字串中儲存在緩衝區,再從輸入緩衝區中取走輸入字串賦值給變數,但卻沒有取走回車符 n 再當我們二次呼叫scanf...