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

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

問題來源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宣告成字元創的形式,哈哈,這個好。。。。

結果為: