我现在已经完成了代码的基础知识,它的工作原理与它应该的一样。但是现在我想添加一个try-catch异常,以便如果用户输入的内容不是整数,它将抛出一个异常并说出类似的内容:输入错误,然后重试。这是我需要的地方:
for (int i = 0; i < nummer.Length; i++)
{
Console.Write("Nummer " + talnr + ": ");
talnr++;
string str = Console.ReadLine();
int element = Convert.ToInt32(str);
nummer[i] = element;
}
该循环将循环10次,并将输入存储在数组中。当我尝试时,它要么成为一个异常,要么继续循环或中断循环,然后继续执行下一个代码块。
答案 0 :(得分:4)
我赞成使用...
bool parsed = Int.TryParse(str, out myInt);
If (parsed)
{
// do something
}
恕我直言,try / catch块仅应在无法处理的未处理异常(例如,诸如文件系统交互之类的易失性事件)存在可能性时才真正使用,以进行相应处理(例如,日志错误等)。 ),然后继续进行而不会导致程序崩溃。
始终尝试使用框架中可用的方法和功能来处理“已知”。
答案 1 :(得分:0)
您要执行的操作不需要try-catch
。您可以使用TryParse
方法检查所需的输入是否为格式正确的整数,并提示用户输入其他输入。
for (int i = 0; i < nummer.Length; i++)
{
bool isAnInteger = false;
int element = 0;
Console.Write("Nummer " + talnr + ": ");
talnr++;
string str = Console.ReadLine();
// evaluates to true if str can be parsed as an int, false otherwise
// and outputs the parsed int to element
isAnInteger = int.TryParse(str, out element);
while (!isAnInteger)
{
Console.Write("Wrong input, try again. ");
str = Console.ReadLine();
isAnInteger = int.TryParse(str, out element);
}
nummer[i] = element;
}
答案 2 :(得分:0)
使用int.TryParse方法。
此代码从用户读取修剪后的输入字符串,并尝试将其转换为整数。如果转换成功,它将创建一个称为“结果”的整数变量,然后可以在IF块中使用它。如果转换失败,则可以在ELSE块中编写所需代码。如果列表中总共需要10个整数,则我放弃FOR循环,而推荐使用DO WHILE循环,该循环检查成功转换了多少个整数并将其添加到列表中。它将一直请求输入,直到列表中填充了10个整数。
List<int> elements = new List<int>();
do
{
Console.WriteLine("Please enter an integer.");
if (int.TryParse(Console.ReadLine().Trim(), out int result))
{
Console.WriteLine($"You entered the integer {result}");
elements.Add(result);
}
else
{
Console.WriteLine("You must enter an integer. Please try again.");
}
} while (elements.Count < 10);
答案 3 :(得分:-1)
如果可以帮助的话,最好不要抛出任何异常。在这种情况下,您可以改用int.TryParse()
。此代码块可以替换您的int element...
行:
int element;
if (!int.TryParse(str, out element)) {
Console.WriteLine("Bad!!");
i--;
continue;
}
i--
是要确保i
在循环的下一次交互中具有相同的值。这样做将确保您在完成循环之前仍然获得10个有效输入。 (很多人会说这是一件非常糟糕的事情,但是这样做的原因是可读性-如果您有一个大的for
循环并在中间某个地方减小值,那么下一个家伙很难找在您的代码中准确了解正在发生的事情。但这只是一个短循环,因此非常明显。请注意这一点。
continue
关键字会跳过循环的其余部分,然后继续进行下一个循环(因此,您不会在数组中添加错误的值)。
答案 4 :(得分:-1)
如果要将代码保留在try catch循环中,则为:
for (int i = 0; i < nummer.Length; i++)
{
try {
Console.Write("Nummer " + talnr + ": ");
talnr++;
string str = Console.ReadLine();
int element = Convert.ToInt32(str);
nummer[i] = element;
}
catch
{
MessageBox.Show("Error, numbers only");
goto breakloop;
}
}
breakloop:;
goto语句在发生错误时结束循环