在判断字符型元素是否符合给定条件时,大家一般会用到getchar(),并在判断完成后输出一个提示语,往往包含换行符‘\n’,但是这样有时会导致输出结果错误,原因是getchar()会接收打印出来的‘\n’这时候我们只需在打印‘\n’后再加一个getchar(),就可以滤掉‘\n’。
这是一个判断输入的字母是否为元音字母的程序:
#include<stdio.h>
int main() {
char v[] = "AaEeIiOoUu";
char ch = 0;
int i;
while ((ch = getchar() )!= EOF) {
for (i = 0; i < 10; i++) {
if (ch == v[i]) {
printf("Vowel\n");
break;
}
}
if (i == 10) {
printf("Consonant\n");
}
getchar();
}
return 0;
}
可以看到,两种情况print的内容都含有‘\n’,在打印后加上getchar()就可以滤掉‘\n’,从而避免其影响下一次输入产生的结果。
另一种写法(使用scanf)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
char v[] = "AaEeIiOoUu";
char ch = 0;
int i;
while ((scanf(" %c",&ch)) != EOF) {
for (i = 0; i < 10; i++) {
if (ch == v[i]) {
printf("Vowel\n");
break;
}
}
if (i == 10) {
printf("Consonant\n");
}
}
return 0;
}
使用scanf扫描输入时,空一格也可以滤掉字符。