鱼C论坛

 找回密码
 立即注册
查看: 1873|回复: 5

[已解决]求解:如何使输入字母只能是Y/N

[复制链接]
发表于 2019-3-13 16:50:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
就像这个代码,输入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;
}
最佳答案
2019-3-13 18:24:19
本帖最后由 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")                         ;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-13 17:09:17 | 显示全部楼层
可以在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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-13 17:57:41 | 显示全部楼层
Swarm 发表于 2019-3-13 17:09
可以在scanf读取字符后,加入对a的内容的判断。
#include

谢谢解答。
你这不够完善第二次问题“是否下雨”还要在进行一次 || 判断
还有getchar();个人理解就是:第一次输入Y/N然后我们要确认按回车键,要是没有这个就相当于第二个问题用“回车”去输入了,你可以用我原码去试一下删除和不删除的运行情况(新手不知道解释的好不好你自己判断一下)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-13 18:24:19 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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")                         ;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-13 21:12:08 | 显示全部楼层
忘殇流年 发表于 2019-3-13 17:57
谢谢解答。
你这不够完善第二次问题“是否下雨”还要在进行一次 || 判断
还有getchar();个人理解就是: ...

哦,我漏看了后面还有一次判断了。getchar用来清除回车的想法不错呀,我一直都是用fflush(stdin)解决的,以后也可以试试看这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-14 15:12:17 | 显示全部楼层
jackz007 发表于 2019-3-13 18:24
函数 getch() 用于无回显从键盘读取一个字符,其余的代码逻辑非常简单,就不用多罗嗦了吧。

我刚学c语言这个bool是C++才能用的吧,
问题已解决,还是谢谢你的回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 10:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表