c語言中scanf("%c",&c)吃掉回車或者空格字元的問題
阿新 • • 發佈:2018-12-23
問題來源http://zhidao.baidu.com/question/487898822.html?oldq=1#reply-box-1224608638
#include<stdio.h> void main(){ int a; char b; printf("input a integer\n"); scanf("%d",&a); //這裡需要吸收 回車符 下面有種方法,第二種我沒看懂 誰能改下程式碼 告訴我第二種怎麼用 printf("input a char\n"); scanf("%c",&b); printf("%d,%c\n",a,b); } /* (1)用getchar()清除 (2)用"%1s"來限制 (3)用格式串中空格或"%*c"來"吃掉" (4)用函式fflush(stdin)清除全部剩餘內容 */
下面使用第二種方法
#include<stdio.h>
int main(){
int a;
char b;
printf("input a integer\n");
scanf("%d",&a);
//這裡需要吸收 回車符 下面有種方法,第二種我沒看懂 誰能改下程式碼 告訴我第二種怎麼用
printf("input a char\n");
scanf("%1s",&b);
printf("%d %c\n",a,b);
system("pause");
return 0;
}
環境(dev c++)
測試結果
可以看出a的值異常了,為什麼呢?
這應該和編譯器有關係,因為%1s的輸入方式的問題。
解決方法有兩種:
第一:
char b;
int a;
將這兩個變數的宣告換一下,哈哈,以前老師說過。但我感覺著不是解決方法,如果還有其他的變數,這種方式是不是還會危害其他呢。
第二:
#include<stdio.h> int main(){ int a; char b[2]; printf("input a integer\n"); scanf("%d",&a); //這裡需要吸收 回車符 下面有種方法,第二種我沒看懂 誰能改下程式碼 告訴我第二種怎麼用 printf("input a char\n"); scanf("%1s",&b); printf("%d %c\n",a,b[0]); system("pause"); return 0; }
b宣告成字元創的形式,哈哈,這個好。。。。
結果為: