我仍在学习c#并遇到了这个问题,我想制作一个确保用户输入整数的程序。但是当我这样做时,我陷入了无限循环。为什么是布尔b;即使用户键入了整数,变量也会在catch块中更改其值。 我的代码:
class MainClass
{
public static void Main (string[] args)
{
int n= 0;
bool b = true;
do {
try {
Console.WriteLine ("Enter an integer : ");
n = Convert.ToInt32 (Console.ReadLine ());
} catch (Exception e) {
Console.WriteLine (e.Message);
b = false;
} finally {
Console.WriteLine (n);
}
} while(b == false);
}
}
但是我解决了这个问题:
class MainClass
{
public static void Main (string[] args)
{
int n= 0;
bool b;
do {
try {
b = true;
Console.WriteLine ("Enter an integer : ");
n = Convert.ToInt32 (Console.ReadLine ());
} catch (Exception e) {
Console.WriteLine (e.Message);
b = false;
} finally {
Console.WriteLine (n);
}
} while(b == false);
}
}
有人可以解释吗?
答案 0 :(得分:4)
如果用户未输入正确的输入, b 变量将永远被永久错误地捕获。因此,在每个循环的开始,都需要将布尔变量设置为“ true”,这是其默认值。那是因为每次迭代都应是用户输入整数的新尝试。
答案 1 :(得分:2)
您只需使用int.TryParse即可轻松完成此操作,而无需使用try catch块
const colors = require('colors/safe');
您甚至可以不引入bool变量来进一步简化它
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"declaration": false,
"lib": [
"dom",
"es2015",
],
"module": "commonjs",
"moduleResolution": "node",
"target": "es6",
"skipLibCheck": true,
"stripInternal": true
},
"exclude": [
"node_modules"
]
}