问题来源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声明成字符创的形式,哈哈,这个好。。。。
结果为: