用户只有两个选择' a'或者' b',如果用户输入的不是' a'或者' b'错误消息应提示他们仅输入' a'或者' b'。
好的: 我输入了一封信' a'它绕过了while循环。
坏了: 当我进入' b'它没有绕过while循环?有关解决这个问题的任何建议吗?
#include <stdio.h>
int main(void)
{
char c;
printf("enter a or b to make it out!\n");
//loop if answer is NOT a or b
while ((c = getchar() != 'a') && (c = getchar() != 'b'))
{
//let the user know there has been a problem!
printf("That value is invalid");
printf("\nPlease enter a or b:\n");
fseek(stdin,0,SEEK_END);
}
printf("You made it out!");
return 0;
}
答案 0 :(得分:1)
每当你执行getchar()
时,都会读取_different_字符。因此,您应该将while
循环更改为
while (((c = getchar()) != 'a') && (c != 'b'))
否则,只要选中条件c = getchar() != 'b'
,c就会为\n
。
更重要的是,你应该将\n
放在一边。因此,您可以在getchar()
循环中添加另一个while
,其返回值不需要使用。
答案 1 :(得分:1)
多个问题:
c = getchar() != 'a'
不会将读取的字符存储到c
中,它会读取并丢弃该字符,并将比较结果存储到c
。
您应该测试读取的字符的值,而不是读取第二个字符。
您还应检查文件的结尾,并使用int
允许unsigned char
的所有值和特殊值EOF
。
倒回stdin
以读取更多字节将不会产生您所期望的:要么成功又要重读相同的字节,否则可能会失败stdin
无缓冲并绑定到设备
试试这个:
#include <stdio.h>
int main(void) {
int c;
printf("enter a or b to make it out!\n");
//loop if answer is NOT a or b
while ((c = getchar()) != EOF && c != 'a' && c != 'b') {
//let the user know there has been a problem!
printf("That value is invalid");
printf("\nPlease enter a or b:\n");
}
printf("You made it out!\n");
return 0;
}