1. 程式人生 > >gets需要用getchar吃掉換行符

gets需要用getchar吃掉換行符

當我們先輸入一個整型類的數後,再用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(),用來吃掉換行符