在编写方法时如何防止某些形式的输入?

Dut*_*ner 6 c# console for-loop

我仍然是高级编程语言编程的初学者,所以我不知道这是否是一个简单的解决方案,但无论如何我很乐意学习.我在C#中编写了一个小程序报警程序,让用户输入报警需要关闭的秒数.它工作得很好,但用户需要提供的输入必须是一个数字.当用户输入任何形式的文本时,程序崩溃.现在,如何阻止用户输入文本,调用函数或在用户执行其他操作时,而不是刚刚崩溃的程序?

这是我现在的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test
{
    class Alarm
    {
        public static void play()
        {
            int sec;
            sec = Convert.ToInt16(Console.ReadLine());

            for (int i = 0; i < seconds; ++i)
            {
                System.Threading.Thread.Sleep(1000);
            }

            for (int i = 0; i < 10; i++)
            {
                Console.Beep();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Llo*_*ell 11

您应该在转换前完成检查:

int sec;

if (int.TryParse(Console.ReadLine(), out sec)
{
  // this is valid continue
}
else
{
  // show error highlighting that entry must be a number
}
Run Code Online (Sandbox Code Playgroud)

int.TryParse将返回一个布尔突出显示输入是否可解析为int.sec如果成功,它还会将变量设置为值.


Tud*_*dor 7

您可以无限循环直到用户输入一个数字:

int number = 0;
while(!Int32.TryParse(Console.ReadLine(), out number))
{
    Console.WriteLine("Please input a number.");
}
Run Code Online (Sandbox Code Playgroud)

Int32.TryParsefalse如果转换失败则返回,而不是抛出异常,如果成功则返回第二个out参数中的结果.