1. 程式人生 > >解決c語言中scanf("%c",&c)吃掉回車或者空格字元的問題

解決c語言中scanf("%c",&c)吃掉回車或者空格字元的問題

#include <stdio.h>
int main()
{
	int i;
	char *p;//有十個元素的字元陣列
	for(i=0;i<10;i++){
		scanf("%c",(p+i));
	}
	for(i=6;i<10;i++)
		*(p+i)='#';
	for(i=0;i<10;i++)
		printf("%c",p[i]);
	return 0;
}

這是一個運用指標編寫的程式,對具有十個元素的字元型陣列,從下標為6的元素開始全部設定為“#”

實際執行發現,scanf吃掉了輸入的字元後的空格或者回車,導致輸出結果


  1. (1)用getchar()清除 
  2. (2)用"%1s"來限制
     
  3. (3)在%c前加一個空格變成" %c"來"吃掉" 
  4. (4)用函式fflush(stdin)清除全部剩餘內容 

這是我們搜尋到的幾種方法

(1)

#include <stdio.h>
int main()
{
	int i;
	char *p;//有十個元素的字元陣列
	for(i=0;i<10;i++){
		scanf("%c",(p+i));
		getchar();
	}
	for(i=6;i<10;i++)
		*(p+i)='#';
	for(i=0;i<10;i++)
		printf("%c",p[i]);
	return 0;
}

輸出結果:


(2)

#include <stdio.h>
int main()
{
	int i;
	char *p;//有十個元素的字元陣列
	for(i=0;i<10;i++){
		scanf("%1s",(p+i));
	}
	for(i=6;i<10;i++)
		*(p+i)='#';
	for(i=0;i<10;i++)
		printf("%c",p[i]);
	return 0;
}

輸出結果:


(3)

#include <stdio.h>
int main()
{
	int i;
	char *p;//有十個元素的字元陣列
	for(i=0;i<10;i++){
		scanf(" %c",(p+i));
	}
	for(i=6;i<10;i++)
		*(p+i)='#';
	for(i=0;i<10;i++)
		printf("%c",p[i]);
	return 0;
}

輸出結果:


(4)fflush(stdin)容易出錯,最好別用,也不規範。

詳細的下次再做探討