解決c語言中scanf("%c",&c)吃掉回車或者空格字元的問題
阿新 • • 發佈:2018-12-31
#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)用getchar()清除
- (2)用"%1s"來限制
- (3)在%c前加一個空格變成" %c"來"吃掉"
- (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)容易出錯,最好別用,也不規範。
詳細的下次再做探討