鱼C论坛

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

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

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

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

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

x
就像这个代码,输入Y和N没问题,但是如果输入y,n,1,2,3效果跟N一样,
求问怎么写只能输入Y和N,或者写1,2,3等不符的会有警告字(或者提示音)
本人新手希望说的详细一点,谢谢^_^!

  1. #include <stdio.h>

  2. int main()
  3. {
  4.         char a,b;
  5.         printf("今天是否有空?(Y/N)");
  6.         scanf("%c",&a);
  7.        
  8.         getchar();
  9.        
  10.         if('Y' == a)
  11.         {
  12.                 printf("是否下雨?(Y/N)");
  13.                 scanf("%c",&b);
  14.                 if('Y' == b)
  15.                 {
  16.                                 printf("记得带伞!\n");
  17.                 }
  18.                 else
  19.                 {
  20.                         printf("玩的愉快!\n");
  21.                 }
  22.                
  23.         }
  24.         else
  25.         {
  26.                 printf("自己玩耍 ——\n");
  27.         }

  28.         return 0;
  29. }
复制代码
最佳答案
2019-3-13 18:24:19
本帖最后由 jackz007 于 2019-3-13 19:13 编辑

      函数 getch() 用于无回显从键盘读取一个字符,其余的代码逻辑非常简单,就不用多罗嗦了吧。
  1. #include <stdio.h>
  2. #include <conio.h>

  3. int main()
  4. {
  5.         char a , b                                                ;
  6.         bool f                                                    ;

  7.         f = false                                                 ;
  8.         for(;;) {
  9.                 printf("今天是否有空?(Y/N)")                     ;
  10.                 a = getch()                                       ;
  11.                 printf("\n")                                      ;
  12.                 if(a == 'Y' || a == 'y' || a == 'N' || a == 'n') {
  13.                         if(a == 'Y' || a == 'y') f = true         ;
  14.                         break                                     ;
  15.                 } else {
  16.                         printf("请输入 'Y' 或 'N'\n")             ;
  17.                 }
  18.         }
  19.         if(f) {
  20.                 f = false                                         ;
  21.                 for(;;) {
  22.                         printf("是否下雨?(Y/N)")                 ;
  23.                         b = getch()                               ;
  24.                         printf("\n")                              ;
  25.                         if(b == 'Y' || b == 'y' || b == 'N' || b == 'n') {
  26.                                 if(b == 'Y' || b == 'y') f = true ;
  27.                                 break                             ;
  28.                         } else {
  29.                                 printf("请输入 'Y' 或 'N'\n")     ;
  30.                         }
  31.                 }
  32.                 if(f) printf("记得带伞!\n")                      ;
  33.                 else printf("玩的愉快!\n")                       ;
  34.         } else {
  35.                 printf("自己玩耍 ——\n")                         ;
  36.         }
  37. }
复制代码
小甲鱼最新课程 -> https://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;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

发表于 2019-3-13 18:24:19 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-3-13 19:13 编辑

      函数 getch() 用于无回显从键盘读取一个字符,其余的代码逻辑非常简单,就不用多罗嗦了吧。
  1. #include <stdio.h>
  2. #include <conio.h>

  3. int main()
  4. {
  5.         char a , b                                                ;
  6.         bool f                                                    ;

  7.         f = false                                                 ;
  8.         for(;;) {
  9.                 printf("今天是否有空?(Y/N)")                     ;
  10.                 a = getch()                                       ;
  11.                 printf("\n")                                      ;
  12.                 if(a == 'Y' || a == 'y' || a == 'N' || a == 'n') {
  13.                         if(a == 'Y' || a == 'y') f = true         ;
  14.                         break                                     ;
  15.                 } else {
  16.                         printf("请输入 'Y' 或 'N'\n")             ;
  17.                 }
  18.         }
  19.         if(f) {
  20.                 f = false                                         ;
  21.                 for(;;) {
  22.                         printf("是否下雨?(Y/N)")                 ;
  23.                         b = getch()                               ;
  24.                         printf("\n")                              ;
  25.                         if(b == 'Y' || b == 'y' || b == 'N' || b == 'n') {
  26.                                 if(b == 'Y' || b == 'y') f = true ;
  27.                                 break                             ;
  28.                         } else {
  29.                                 printf("请输入 'Y' 或 'N'\n")     ;
  30.                         }
  31.                 }
  32.                 if(f) printf("记得带伞!\n")                      ;
  33.                 else printf("玩的愉快!\n")                       ;
  34.         } else {
  35.                 printf("自己玩耍 ——\n")                         ;
  36.         }
  37. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

哦,我漏看了后面还有一次判断了。getchar用来清除回车的想法不错呀,我一直都是用fflush(stdin)解决的,以后也可以试试看这个
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我刚学c语言这个bool是C++才能用的吧,
问题已解决,还是谢谢你的回答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 23:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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