我正在尝试读取必须为'C'或'n'的字符。
如果不是,则打印错误并要求另一个字符。
#include <stdio.h>
int main(int argc, char const *argv[])
{
int c;
printf("Enter the character: ");
c = getchar();
while (!(c=='C' && c=='n')){
printf("Wrong!.\n");
printf("Enter the character: ");
c = getchar();
}
printf("\n");
return 0;
}
我得到的是:
输入字符:s
错!
输入字符:错误!
输入字符:
就像它在while循环中检查两次一样。
答案 0 :(得分:3)
两件事:
1)您正在按一个角色,然后按Enter键。那是两个角色。如果您想阅读整行,请不要使用getchar
。
2)你的条件毫无意义。永远不会c
等同于'C'
并且相当于'n'
,因此您正在测试不可能的内容。你的循环永远不会结束。
答案 1 :(得分:1)
getchar()
用于逐字符输入控制。你仍然可以使用getchar()
,但你必须处理键盘上的所有字符。你可以忽略你不关心的角色来做到这一点。
我也会重构你的循环做一个do-while循环而不是while循环
要修改代码以捕获大写和小写A-Z,您可以执行以下操作:
#include <stdio.h>
int main(int argc, char const *argv[])
{
int c;
printf("Enter the character: ");
do {
c = getchar();
// ignore non a-z or non A-Z
if( c < 'A' || ( c >'Z' && c < 'a' ) || c > 'z' ) {
continue;
}
// look for the characters you care about
if( c=='C' || c=='n') {
break;
}
// now we only have incorrect characters that are
// only upper or lower case
printf("%c Wrong!\n", (char)c );
printf("Enter the character: ");
} while (1);
printf("\n");
return 0;
}
虽然我没有测试过这个......你应该得到类似的东西:
输入字符:s错误!
输入字符:t错误!
输入字符:C
输入“s - = + t \ n01234C”时。
注意:'\ n'我用来表示从键盘输入的回车