首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >switch语句

switch语句
EN

Stack Overflow用户
提问于 2009-06-14 01:07:26
回答 5查看 1.6K关注 0票数 1

我正在练习一个程序中的“开关循环”。我正在编写一个代码,用户可以在其中输入整数,在用户输入整数之后,它还会显示用户刚刚输入的内容。现在,我正在尝试实现程序将要求用户通过选择Y/N再次输入数字的位置。

我已经将它包含在我的代码中,但是如果我在程序第一次要求我输入一个整数时输入字符,程序将执行catch部分。如何才能使用户输入一个字符时也会再次显示消息“请输入整数:”

代码语言:javascript
复制
          int enterYourNumber;
          char shortLetter;

            try
            {
                Console.WriteLine("Please enter the integer: ");
                enterYourNumber = Convert.ToInt32(Console.ReadLine());
                WriteNumber(enterYourNumber);

                Console.WriteLine("Do you still want to enter a number? Y/N");
                shortLetter = Convert.ToChar(Console.ReadLine());

                while (shortLetter == 'y' || shortLetter == 'Y')
                {
                    Console.WriteLine("Please enter the integer: ");
                    enterYourNumber = Convert.ToInt32(Console.ReadLine());
                    WriteNumber(enterYourNumber);

                    Console.WriteLine("Do you still want to enter a number? Y/N");
                    shortLetter = Convert.ToChar(Console.ReadLine());
                }

            }
            catch
            {                                        
                Console.WriteLine("Please enter an integer not a character");
            }
        }

            public static void WriteNumber(int wordValue)
            {

            switch (wordValue)
            {
                case 1:
                    Console.WriteLine("You have entered number one");
                    break;
                case 2:
                    Console.WriteLine("You have entered number two");
                    break;
                case 3:
                    Console.WriteLine("You have entered number three");
                    break;
                default:
                    Console.WriteLine("You have exceeded the range of number 1-3 ");
                    break;
            }

这就是我所做的;我不知道为什么我会得到一个错误。新的方法似乎不起作用:

代码语言:javascript
复制
        int enterYourNumber;
        char shortLetter;


          do
        {
            enterYourNumber = GetNumber();
            WriteNumber(enterYourNumber);                
            Console.WriteLine("Do you still want to enter a number? Y/N");
            shortLetter = Convert.ToChar(Console.ReadLine());
         }
       while (shortLetter == 'y' || shortLetter == 'Y')
        {
            Console.WriteLine("Please enter the integer: ");
            enterYourNumber = Convert.ToInt32(Console.ReadLine());
            WriteNumber(enterYourNumber);

            Console.WriteLine("Do you still want to enter a number? Y/N");
            shortLetter = Convert.ToChar(Console.ReadLine());
        }
    }



       public static int GetNumber() 
       {
       bool done = false;
       int value;
       while ( !done ) 
        {
            Console.WriteLine("Please enter the integer: ");
        try 
        {
            value = Convert.ToInt32(Console.ReadLine());
            done = true;
        }
       catch 
        {
            Console.WriteLine("Please enter an integer not a character");
        }
        }
       }

更新

比尔,这是你举的例子,看起来我还是弄错了:

代码语言:javascript
复制
    public static void Main(string[] args)
    {
        int enterYourNumber;
        char shortLetter;



        do
        {
            enteryourNumber = GetNumber();
            WriteNumber(enteryourNumber);
            Console.WriteLine("Do you still want to enter a number? Y/N");
            shortLetter = Convert.ToChar(Console.ReadLine());
        } 
        while (shortLetter == 'y' || shortLetter == 'Y');
    }


    public static int GetNumber()
    {
        bool done = false;
        int value;
        while (!done)
        {
            Console.WriteLine("Please enter the integer: ");
            try
            {
                value = Convert.ToInt32(Console.ReadLine());
                done = true;
            }
            catch
            {
                Console.WriteLine("Please enter an integer not a character");
            }

            Console.WriteLine("Please enter the integer: ");
            enterYourNumber = Convert.ToInt32(Console.ReadLine());
            WriteNumber(enterYourNumber);
            Console.WriteLine("Do you still want to enter a number? Y/N");
            shortLetter = Convert.ToChar(Console.ReadLine());   
        }
    }

    public static void WriteNumber(int wordValue)
    {

        switch (wordValue)
        {
            case 1:
                Console.WriteLine("You have entered number one");
                break;

            case 2:
                Console.WriteLine("You have entered number two");
                break;

            case 3:
                Console.WriteLine("You have entered number three");
                break;

            default:
                Console.WriteLine("You have exceeded the range of number 1-3 ");
                break;
        }
    }
}
}

更新

这个回答是给Robert的。这就是我现在所做的,但是如果我输入"N“,它将不会退出程序。它仍然问了同样的问题。

代码语言:javascript
复制
    public static void Main(string[] args)
    {
        int enterYourNumber;
        char shortLetter;
        bool validEntry;



        while (true)
        {
            do
            {
                Console.WriteLine("Please enter an integer: ");
                string numberString = Console.ReadLine();
                validEntry = int.TryParse(numberString, out enterYourNumber);
                WriteNumber(enterYourNumber);
                if (!validEntry)
                {
                    Console.WriteLine("Entry must be an integer");
                }
            } while (!validEntry);

            Console.WriteLine("Do you still want to enter a number? Y/N");
            shortLetter = Convert.ToChar(Console.ReadLine());


        }
     }




    public static void WriteNumber(int wordValue)
    {
        switch (wordValue)
        {
            case 1:
                Console.WriteLine("You have entered number one");
                break;
            case 2:
                Console.WriteLine("You have entered numbered two");
                break;
            case 3:
                Console.WriteLine("You have entered numbered three");
                break;
            default:
                Console.WriteLine("You have exceeded the range of number 1-3");
                break;
        }
    }
}
}

更新

罗伯特和比尔,这是我现在得到的。我该如何改进这一点呢?

代码语言:javascript
复制
     public static void Main(string[] args)
     {
        int intEnterYourNumber;
        char charShortLetter;
        string strUserInput;

        do
        {
            do
            {
                Console.WriteLine("Please enter the integer: ");
                strUserInput = Console.ReadLine();
            } while (!int.TryParse(strUserInput, out intEnterYourNumber));
            WriteNumber(intEnterYourNumber);
            Console.WriteLine("Do you still want to enter a number? Y/N");
            charShortLetter = Convert.ToChar(Console.ReadLine().ToUpper());
        } while (charShortLetter == 'Y');
    }



    public static void WriteNumber(int wordValue)
    {
        switch (wordValue)
        {
            case 1:
                Console.WriteLine("You have entered number one");
                break;
            case 2:
                Console.WriteLine("You have entered numbered two");
                break;
            case 3:
                Console.WriteLine("You have entered numbered three");
                break;
            default:
                Console.WriteLine("You have exceeded the range of number 1-3");
                break;
        }
    }
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-06-14 01:25:22

在循环内移动try/catch块。Robert Harvey关于do/while循环的建议也很好。

代码语言:javascript
复制
 int enterYourNumber;
 char shortLetter;

 do
 {
      try
      {
          Console.WriteLine("Please enter the integer: ");                
          enterYourNumber = Convert.ToInt32(Console.ReadLine());                
          WriteNumber(enterYourNumber); 
      }
      catch( FormatException )
      {                                        
          Console.WriteLine("Please enter an integer not a character");
      }  

      shortLetter = '\0';
      do
      {
          try
          {
              Console.WriteLine("Do you still want to enter a number? Y/N");                    
              shortLetter = Convert.ToChar(Console.ReadLine());
          }
          catch( FormatException ) 
         {
              Console.WriteLine("Please enter a single character");
         }
      }     
      while ( shortLetter == '\0' )      
 }                
 while (shortLetter == 'y' || shortLetter == 'Y')

 }

        public static void WriteNumber(int wordValue)
        {

        switch (wordValue)
        {
            case 1:
                Console.WriteLine("You have entered number one");
                break;
            case 2:
                Console.WriteLine("You have entered number two");
                break;
            case 3:
                Console.WriteLine("You have entered number three");
                break;
            default:
                Console.WriteLine("You have exceeded the range of number 1-3 ");
                break;
        }
票数 0
EN

Stack Overflow用户

发布于 2009-06-14 02:10:14

我认为如果你不使用来测试你的数字,你的代码会更容易学习和理解。尝试使用int.TryParse() (MSDN上的TryParse())。TryParse()返回true (或false),具体取决于输入的数字是否有效:

代码语言:javascript
复制
int number;
bool validEntry = int.TryParse(enterYourNumber, out number);
if (!validEntry)
{
    Console.WriteLine("Entry must be an integer.");
}

此外,您还可以了解do...while loop (link。do..while循环类似于常规while循环,不同之处在于do-while循环在计算条件表达式之前执行一次。

代码语言:javascript
复制
bool validEntry;
int enteredNumber;
do
{
    Console.Write("Please enter the integer: ");
    string numberString = Console.ReadLine();
    validEntry = int.TryParse(numberString, out enteredNumber);
    if (!validEntry)
    {
        Console.WriteLine("Entry must be an integer.");
    }
} while (!validEntry);

将整个过程包装在另一个while循环中(“您还想输入一个数字(Y/N)吗?”)你就完事了。

票数 8
EN

Stack Overflow用户

发布于 2009-06-14 01:12:19

代码语言:javascript
复制
do
{
    Console.WriteLine("Please enter the integer: ");                
    enterYourNumber = Convert.ToInt32(Console.ReadLine());                
    WriteNumber(enterYourNumber);                
    Console.WriteLine("Do you still want to enter a number? Y/N");                    
    shortLetter = Convert.ToChar(Console.ReadLine());
}                
while (shortLetter == 'y' || shortLetter == 'Y')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/991896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档