1. 程式人生 > 程式設計 >C語言使用scanf連續輸入字串出現的問題

C語言使用scanf連續輸入字串出現的問題

#include<stdio.h>
 
int main()
{
	char a,b;
	scanf("%c",&a);
	scanf("%c",&b);
	printf("%c,%c",a,b);
}

一段看上去很簡單的程式碼,即使是C語言初學者也能看懂。

可是在執行的時候卻出現了問題:
①輸入a後按下回車

在這裡插入圖片描述

②用空格隔開之後再按下回車

在這裡插入圖片描述

相信和我一樣的大部分初學者,看著自己天衣無縫的程式碼,百思不得其解。

讓我們先來看看,在百度百科中,對於scanf函式的解釋

在這裡插入圖片描述

在①中,我們只輸入了a和回車。而這時,回車便留在了緩衝區中,直接被下一個scanf所吸收。在②中,輸入了a、空格、b和回車,在這種情況下,我們輸入的空格則進入了緩衝區中,導致b無法被讀取,導致出現了問題。

解決方法
①在第二個%c前加上空格,來抵消之前輸入的空格/回車

#include<stdio.h>
 
int main()
{
	char a,&a);
	scanf(" %c",&b);	//在%c前加上一個空格
	printf("%c,b);
}

②在第一個%c後面加上一個*c,忽略下一個讀入的字元

#include<stdio.h>
 
int main()
{
	char a,b;
	scanf("%c*c",b);
}

③用fflush清空緩衝區

#include<stdio.h>
 
int main()
{
	char a,&a);
	fflush(stdin); 
	scanf("%c",b);
}

④用getchar吸收字元

#include<stdio.h>
 
int main()
{
	char a,&a);
	getchar();
	scanf("%c",b);
}

除方法①以外,其他三種方法不僅在使用scanf時有效,在使用getchar碰到類似問題的時候也有效,有興趣的讀者可以自行嘗試。

到此這篇關於C語言使用scanf連續輸入字串出現的問題的文章就介紹到這了,更多相關C語言scanf連續輸入字串內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!