1

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

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

          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;
            }

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

        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");
        }
        }
       }

更新

比尔,这是您给出的示例,看来我仍然遇到错误:

    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;
        }
    }
}
}

更新

这个回应是给罗伯特的。这就是我现在所做的,但如果我输入“N”它不会退出程序。它仍然问同样的问题。

    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;
        }
    }
}
}

更新

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

     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;
        }
    }
4

5 回答 5

8

如果您不使用异常来测试您的数字,我认为您的代码会更容易学习和理解。尝试使用int.TryParse()代替( MSDN 上的TryParse())。TryParse( ) 根据输入的数字是否有效返回true(或false ):

int number;
bool validEntry = int.TryParse(enterYourNumber, out number);
if (!validEntry)
{
    Console.WriteLine("Entry must be an integer.");
}

另外,了解 do...while 循环链接)。do..while 循环类似于常规 while 循环,除了在计算条件表达式之前执行一次 do-while 循环。

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)吗?”),你就完成了。

于 2009-06-14T02:10:14.227 回答
2
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')
于 2009-06-14T01:12:19.123 回答
1

罗伯特是一个开始,但也许我们仍然想尝试抓住......

将您的主要功能替换为:

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() {
    boolean 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");
        }
    }
}

然后在 main 函数中删除你的 try catch。

于 2009-06-14T01:15:27.947 回答
1

由于您正在学习,您还可以考虑以不同的方式处理错误。
看看 SO 问题:在 C# 中,try-catch 是否应该用于 is-numeric 测试?更多想法和讨论。

于 2009-06-14T01:20:33.957 回答
0

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

 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;
        }
于 2009-06-14T01:25:22.167 回答