gets需要用getchar吃掉換行符
阿新 • • 發佈:2018-11-15
當我們先輸入一個整型類的數後,再用gets輸入一個字串,在這之間會出現問題。
#include"stdio.h"
int main()
{
char a[1000];
int n;
scanf("%d",&n);
printf("接收\n");
gets(a);
printf("輸出:%s\n", a);
printf("輸出結束\n");
return 0;
}
輸入:1
輸出:
1
接收
輸出:
輸出結束
我們把這個換行符打印出來:
#include"stdio.h" int main() { char a[1000]; char ch; int n; scanf("%d",&n); ch = getchar(); printf("字元為[%c]\n", ch); return 0; }
執行結果:
1
字元為[
]
原因是scanf()會把換行符保留在緩衝區中,當下一次讀的時候會作為它的輸入。
解決辦法一:
把gets()換成scanf(),scanf會避免這種情況。
解決辦法二:
在scanf("%d", &n);後面緊跟一個getchar(),用來吃掉換行符