忘殇流年 发表于 2019-3-13 16:50:00

求解:如何使输入字母只能是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;
}

Swarm 发表于 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;
}

忘殇流年 发表于 2019-3-13 17:57:41

Swarm 发表于 2019-3-13 17:09
可以在scanf读取字符后,加入对a的内容的判断。
#include



谢谢解答。
你这不够完善第二次问题“是否下雨”还要在进行一次 || 判断
还有getchar();个人理解就是:第一次输入Y/N然后我们要确认按回车键,要是没有这个就相当于第二个问题用“回车”去输入了,你可以用我原码去试一下删除和不删除的运行情况(新手不知道解释的好不好你自己判断一下)

jackz007 发表于 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")                         ;
      }
}

Swarm 发表于 2019-3-13 21:12:08

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

哦,我漏看了后面还有一次判断了。getchar用来清除回车的想法不错呀,我一直都是用fflush(stdin)解决的,以后也可以试试看这个

忘殇流年 发表于 2019-3-14 15:12:17

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

我刚学c语言这个bool是C++才能用的吧,
问题已解决,还是谢谢你的回答
页: [1]
查看完整版本: 求解:如何使输入字母只能是Y/N