黑马程序员技术交流社区

标题: 怎么限制控制台只输入Y和N?我输入别的也能放学,为什么? [打印本页]

作者: 张鹏杰丶HM    时间: 2014-3-6 09:22
标题: 怎么限制控制台只输入Y和N?我输入别的也能放学,为什么?
本帖最后由 czwanglei 于 2014-3-10 13:49 编辑

   static void Main(string[] args)
        {
            int i = 0;

            string can = "n";
            string yes = "y";
            
            while (can.ToLower() == "n" && i < 10)
            {
                Console.WriteLine("同学们这道题你们会了吗");
                can = Console.ReadLine();
                i++;
            }

            //Console.WriteLine("放学吧");
            while (yes.ToLower() == "y")
            {
                Console.WriteLine("放学吧");
                yes = Console.ReadLine();


            }
        }
作者: ?﹪滾妳媽丶    时间: 2014-3-6 10:43
Console.WriteLine("这道题你会做了吗输入y或n");
            string Jie = Console.ReadLine();
            while (Jie != "y" && Jie != "n")
            {
                Console.WriteLine("只能输入y和n请重新输入");
                Jie = Console.ReadLine();
            }
            if (Jie == "y")
            {
                Console.WriteLine("哦,你会做啊");
            }
            else
            {
                Console.WriteLine("哦,你不会做啊");
            }

            Console.ReadKey();
作者: ?﹪滾妳媽丶    时间: 2014-3-6 10:44
我也是初学者,你要的是不是这种效果?  
你的错误我只能看懂一点,你先定义了两个变量存y和n 然后又用这两个变量来接收用户输入的信息。。所以你这个是重新赋值。所以你这个输入什么都是一样。 不知道我因答的正确不正确!!
还有我想请教楼主,你这个can.ToLower是什么意思。你能告诉我吗
作者: zhl406893081    时间: 2014-3-6 11:08
你这程序只有"放学"一条路可走,太狠啦,怎么都会"放学".
  1. static void Main(string[] args)
  2.         {
  3.             string answer;
  4.             Console.Write("同学们,这道题你们会了吗? ");
  5.             answer = Console.ReadLine();
  6.             answer = answer.ToLower();
  7.             if ("yes" == answer || "no" == answer)
  8.             {
  9.                 if ("yes" == answer)
  10.                     Console.WriteLine("放学吧");
  11.                 else
  12.                     Console.WriteLine("做完再放学");
  13.             }
  14.             else
  15.                 Console.WriteLine("请回答 Yer or No");
  16.             Console.ReadKey();
  17.         }
复制代码

作者: zhl406893081    时间: 2014-3-6 11:10
?﹪滾妳媽丶 发表于 2014-3-6 10:44
我也是初学者,你要的是不是这种效果?  
你的错误我只能看懂一点,你先定义了两个变量存y和n 然后又用这两 ...

can.ToLower 字符串转换为小写
作者: Q.z.l    时间: 2014-3-6 14:09
你这个是逻辑问题。
因为你初始化的yes和can是y和n。
到这句while (can.ToLower() == "n" && i < 10),can是n进去一次,输入n继续循环。
但你一输入其他字符就会不成立,然后接着执行 while (yes.ToLower() == "y")的循环。因为yes是初始化的是y所以进去一次显示“放学吧”,你输入y继续循环,输入其他字符不成立,然后程序就结束了。所以是你的循环逻辑写错了。
作者: 李恒权    时间: 2014-3-6 22:16
你这段代码语法没有错,就是不太符合逻辑。
只需要一个循环就够了。
            int i = 0;
            bool flag=false;
            while (flag == false&& i < 10)
           {
               
                Console.WriteLine("同学们这道题你们会了吗");

                 string input = Console.ReadLine();

                if (input == "n")
                {
                    flag = false;
                    i++;
                }
                else if (input == "y")
                {
                    flag = true;
                    Console.WriteLine("可以放学了!");
                }
                else
                {
                    Console.WriteLine("输入有误,只能输入n/y!");
                flag = false;
                }              
            }

            Console.ReadKey();
作者: §風過無痕§    时间: 2014-3-7 00:19
好久没练了   感觉生疏了

  1. int i = 0;//记录学生做题的次数

  2.             string str = null;//接受学生输入的字符串

  3.             bool flag = false;


  4.             do
  5.             {
  6.      Console.WriteLine("同学们请问这道题会做了吗?( yes\\no)");
  7.      str = Console.ReadLine().ToLower();//将学生输入的字符串转换为小写
  8.      if (str != "yes" && str != "no")
  9.      {
  10.         Console.WriteLine("对不起!输入有误 只能输入yes or  no \n");
  11.         flag = true;
  12.      }
  13.      else if (str == "no")
  14.      {
  15.         Console.WriteLine("不会呀~~那就等写会了再放学吧\n");
  16.         i++;
  17.      }
  18.      else
  19.      {
  20.         Console.WriteLine("你真会啦   你写了{0}遍 要写10遍噢\n ", i+1);
  21.         i++;
  22.         flag = true;
  23.      }

  24.      } while (flag && i<10);

  25.         Console.WriteLine("放学吧");
复制代码




作者: 永远的小飞侠    时间: 2014-3-7 12:17
怎么感觉你这种逻辑很怪,试一下这个怎么样?呵呵,在网吧手写的,没运行。
static void Main(string[] args)
        {
               bool flag=true;
              int num=0;//判断输入的次数
               while(flag )
              {
                      Console.WriteLine("同学们这道题你们会了吗?输入(Y/N)");
                      string str=Console.ReadLine();

                       if(str=="Y")
                         {
                              Consoel.WriteLine("放学了!");
                              flag=faule;
                         }
                         else if(str=="N")
                         {
                              Console.WriteLine("同学们这道题你们会了吗?");
                               str=Console.ReadLine();
                               num++;
                               continue;
                         }
                         else
                         {
                              Console.WriteLine("输入的格式不对,请输入(Y/N)");
                               num++;
                               continue;
                         }
                         if(num>10)
                         {
                                 Console.WriteLine("抱歉,输入的次数超过十次了!");
                                 break;
                         }
              }
        }

作者: 不经夸。    时间: 2014-3-8 03:05
?﹪滾妳媽丶 发表于 2014-3-6 10:44
我也是初学者,你要的是不是这种效果?  
你的错误我只能看懂一点,你先定义了两个变量存y和n 然后又用这两 ...

那是转小写的一个函数
作者: azve    时间: 2014-3-9 17:26
要限制控制台只能输入y和n哪你要在
input =console.readline();
之后对输入的input 字符串进行判断
while(true)
{
if(input.ToLower()=="y" || input.ToLower()=="n")
{
//如果是y或者n就进行你学要的操作
。。。
}
else
{
//如果不是y或者n那就继续从控制台接收字符串
input=console.ReadLine();
}
}


//****************************************************


或者使用contains语句也可以
string[] strs=new string[]{ "y","n","Y","N"}

//如果input 不在strs的数组中那么就继续接收
while( !strs.contains(input) )
{
input=console.ReadLine();
}
作者: 朝花夕拾_黑马    时间: 2014-3-12 09:56
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test1
{
    class Program
    {
        /*
         *
1、 老师问学生,这道题你会做了吗?如果学生答"会了(y)",则可以放学.如果学生不会做(n),则老
    师再讲一遍,再问学生是否会做了......
   
    直到学生会为止,才可以放学.

    直到学生会或老师给他讲了10遍还不会,都要放学
         */
        static void Main(string[] args)
        {
            int i = 0;//记录学生说不会做的次数
            while (i < 10)//当学生不会次数小于10老师接着教
            {
                Console.Write("老师问学生,这道题你会做了吗?学生答:");
                if (Console.ReadLine() == "y") // 学生若回答y,则跳出整个循环,打印“老师说放学!”
                {
                    break;
                }
                else if (Console.ReadLine() == "n")//学生若回答n,则老师继续教学,continue跳出本次循环
                {
                    continue;
                }
                i++; //记录学生说 n 的次数
                Console.WriteLine("学生说了 n 的次数:" + i.ToString());
            }
            Console.WriteLine("老师说放学!");
            Console.ReadKey();

        }
    }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2