问题描述
刚学习C语言的同学经常会在学习字符输入时遇到还没有输入字符,但字符变量已经被赋值的情况。如:
#include<stdio.h>
int main(){
int n;
char a;
scanf("%d",&n);//不一定非是整型的只要在输入字符前有过输
//入就有可能出现问题
scanf("%c",&a);
printf("n=%d,a=%c",n,a);
return 0;
}
输入5然后按回车,你会发现还没有输入字符,程序就将结果打印出来了。
这是什么原因导致的呢,原来我们在输入时输入的是5和回车两个字符第一个整型5赋给n而回车赋给了a,而回车符是空白字符所以只能看到换行了不细心的话可能连换行了都看不出来(emmm)。这不是我们要的过程,我们想要的是自己 给两个变量赋值。那怎样解决呢?首先一个简单的做法在输入字符时只要将缓存区的空白字符屏蔽就行了即在%c前加上空格就行了。
#include<stdio.h>
int main(){
int n;
char a;
scanf("%d",&n);
scanf(" %c",&a);
printf("n=%d,a=%c",n,a);
return 0;
}
输入5回车然后输入a回车
可以看到完美了!!这里将空白字符屏蔽掉了也就是说所有空白字符的输入都将无效。此处也有问题(emmm)如果就是想输入空白字符呢我就想给它赋个空白的字符咋整?这就要用到getchar()函数了,用它来接收回车。
#include<stdio.h>
int main(){
int n;
char a;
scanf("%d",&n);
getchar();
scanf("%c",&a);
printf("n=%d,a=%c.",n,a);
return 0;
}
输入5回车空格回车
为了空格显示明显我在空格后面加了个‘.’,可以看到=和‘.’之间有个空格。
就是这些了希望有用。