c语言scanf函数隐藏的缓冲区,零基础学C语言 笔记四 Scanf函数清除缓冲区
Scanf函數清除緩沖區
之前涉及到scanf會先到緩沖區看看是否存在數據,若存在數據,就直接拿緩沖區的數據過來使用,這就涉及到了一個問題,那如果緩沖區的數據不是我想要的呢?
方法一:我們用scanf吸收掉
我們的代碼這樣寫:
int main(int argc, const char * argv[]) {
printf("請輸入一個整數\n");
int num1;
scanf("%d",&num1);
printf("請輸入一個字符\n");
char c;
scanf("%c",&c);//吸收掉一個回車
scanf("%c",&c);
printf("num1= %d ,c= %c\n",num1,c);
return 0;
}
效果如下:
但是這個方法有一個不好的地方就是若用戶輸完第一個整數之后,會按好幾個回車,那我們這個方法就不能滿足了。
方法二:我們用rewind(stdin)來清除緩存,代碼如下:
int main(int argc, const char * argv[]) {
printf("請輸入一個整數:\n");
int num1;
scanf("%d",&num1);
rewind(stdin);
printf("請輸入一個字符\n");
char c;
scanf("%c",&c);
printf("num1=%d,c=%c\n",num1,c);
return 0;
}
這個有個好處就是,當我們輸入第一個整數之后,整數后面我們可以輸入空格,tab 都對我們接下來要輸入的字符無影響,因為我們會清除掉緩存,效果如下:
總結
以上是生活随笔為你收集整理的c语言scanf函数隐藏的缓冲区,零基础学C语言 笔记四 Scanf函数清除缓冲区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis 安装与配置
- 下一篇: neo4j browser执行脚本后不提