求解:如何使输入字母只能是Y/N
就像这个代码,输入Y和N没问题,但是如果输入y,n,1,2,3效果跟N一样,求问怎么写只能输入Y和N,或者写1,2,3等不符的会有警告字(或者提示音)
本人新手希望说的详细一点,谢谢^_^!
#include <stdio.h>
int main()
{
char a,b;
printf("今天是否有空?(Y/N)");
scanf("%c",&a);
getchar();
if('Y' == a)
{
printf("是否下雨?(Y/N)");
scanf("%c",&b);
if('Y' == b)
{
printf("记得带伞!\n");
}
else
{
printf("玩的愉快!\n");
}
}
else
{
printf("自己玩耍 ——\n");
}
return 0;
} 可以在scanf读取字符后,加入对a的内容的判断。
#include <stdio.h>
int main()
{
char a,b;
printf("今天是否有空?(Y/N)");
while(1) //while(1)表示一直执行
{
scanf("%c",&a);
if(a=='Y' || a=='N') //判断输入是否是Y/N
break; //是Y/N的话就立刻退出这个while循环,执行下面的判断语句
else //不是Y/N的话就提示输入有误,并清空缓存区以免scanf错误读取输入
{
printf("\n输入有误,请重新输入!\n");
fflush(stdin);
}
}
getchar(); //这个getchar是干什么的呀?我有点没看懂
if('Y' == a)
{
printf("是否下雨?(Y/N)");
scanf("%c",&b);
if('Y' == b)
{
printf("记得带伞!\n");
}
else
{
printf("玩的愉快!\n");
}
}
else
{
printf("自己玩耍 ——\n");
}
return 0;
} Swarm 发表于 2019-3-13 17:09
可以在scanf读取字符后,加入对a的内容的判断。
#include
谢谢解答。
你这不够完善第二次问题“是否下雨”还要在进行一次 || 判断
还有getchar();个人理解就是:第一次输入Y/N然后我们要确认按回车键,要是没有这个就相当于第二个问题用“回车”去输入了,你可以用我原码去试一下删除和不删除的运行情况(新手不知道解释的好不好你自己判断一下) 本帖最后由 jackz007 于 2019-3-13 19:13 编辑
函数 getch() 用于无回显从键盘读取一个字符,其余的代码逻辑非常简单,就不用多罗嗦了吧。
#include <stdio.h>
#include <conio.h>
int main()
{
char a , b ;
bool f ;
f = false ;
for(;;) {
printf("今天是否有空?(Y/N)") ;
a = getch() ;
printf("\n") ;
if(a == 'Y' || a == 'y' || a == 'N' || a == 'n') {
if(a == 'Y' || a == 'y') f = true ;
break ;
} else {
printf("请输入 'Y' 或 'N'\n") ;
}
}
if(f) {
f = false ;
for(;;) {
printf("是否下雨?(Y/N)") ;
b = getch() ;
printf("\n") ;
if(b == 'Y' || b == 'y' || b == 'N' || b == 'n') {
if(b == 'Y' || b == 'y') f = true ;
break ;
} else {
printf("请输入 'Y' 或 'N'\n") ;
}
}
if(f) printf("记得带伞!\n") ;
else printf("玩的愉快!\n") ;
} else {
printf("自己玩耍 ——\n") ;
}
}
忘殇流年 发表于 2019-3-13 17:57
谢谢解答。
你这不够完善第二次问题“是否下雨”还要在进行一次 || 判断
还有getchar();个人理解就是: ...
哦,我漏看了后面还有一次判断了。getchar用来清除回车的想法不错呀,我一直都是用fflush(stdin)解决的,以后也可以试试看这个 jackz007 发表于 2019-3-13 18:24
函数 getch() 用于无回显从键盘读取一个字符,其余的代码逻辑非常简单,就不用多罗嗦了吧。
我刚学c语言这个bool是C++才能用的吧,
问题已解决,还是谢谢你的回答
页:
[1]