我正在尝试创建一个命令行程序,它会询问您是否需要快速和长时间发出哔声。我在下面的代码中不断获得System.FormatException
。我在Console.WriteLine("how many times should i beep?");
之后立即解决了问题。我通过在此行后面加console.read();//pause
找到了修复方法。
我的问题是我做错了什么?或者我想在那条线之后暂停?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("how fast would you like the sounds to play?");
Console.WriteLine("70 = fast and 300 = slow can pick any number inbetween");
string choice = Console.ReadLine();
int speed = Convert.ToInt32(choice);
Console.Write(speed);
Console.Read();//pause
Console.WriteLine("how many times should i beep?");
string choice2 = Console.ReadLine();
int j = Convert.ToInt32(choice2);
Console.Write(j);
Console.Read();//pause
for (int i = 0 ; i < j; i++)
{
Console.Beep(1000, speed);
}
}
}
答案 0 :(得分:6)
我的通灵调试技巧告诉我,正是这条线抛出异常:
int j = Convert.ToInt32(choice2);
像你之前提到的那样放入Console.Read()
会导致该行不立即执行并延迟抛出异常。
如果您在此行输入的内容不是整数:
string choice2 = Console.ReadLine();
您将在以下FormatException
来电中获得Convert.ToInt32
。
当您传递的值FormatException
Convert.ToInt32
告诉您does not consist of an optional sign followed by a sequence of digits (0 through 9).
被抛出的位置
要解决您的问题,请使用Int32.TryParse
(或只是确保输入有效的整数)。这将返回一个布尔值,指示解析的成功或失败,而不是抛出异常。
另外,欢迎来到StackOverflow!请务必提供有用的答案,并接受最能解决问题的答案。
答案 1 :(得分:3)
为什么那些额外的Console.Read()
在那里?它们会破坏您的程序,因为用户会按return
太多次
Console.WriteLine("how fast would you like the sounds to play?");
Console.WriteLine("70 = fast and 300 = slow can pick any number inbetween");
string choice = Console.ReadLine();
int speed = Convert.ToInt32(choice);
Console.WriteLine(speed);
Console.WriteLine("how many times should i beep?");
string choice2 = Console.ReadLine();
int j = Convert.ToInt32(choice2);
Console.Write(j);
for (int i = 0; i < j; i++)
{
Console.Beep(1000, speed);
}
答案 2 :(得分:0)
实际上,您需要做的只是删除您投放的Read()
暂停。我可能还会更改Write()
来电WriteLine()
来电。
如果您坚持在此处“暂停”,也可以将Read()
来电更改为ReadLine()
来电。
答案 3 :(得分:-1)
试试这个:
Console.Read();
string choice2 = Console.ReadLine();