我有一个简单的程序,用于将输入传递给数组,给定输入的大小和用户输入的元素,如下所示: Full code
除了此代码段之外,所有代码都可以正常运行:
for(int i=0; i<size; i++) {
flagger = false;
while(flagger == false) {
System.Console.WriteLine("Please enter number " + i + " : ");
nextInput = System.Console.ReadLine();
flagger = errorCheck(nextInput);
}
int varPass = System.Convert.ToInt32(nextInput);
System.Console.WriteLine(flagger);
arr[i] = varPass;
}
无论我输入什么大小的循环退出并使用一些空元素对数组进行排序,任何人都可以看到问题吗?
答案 0 :(得分:4)
在errorCheck中,当你在out参数中传递它时,你正在设置大小的值。
因此,下次用户输入小于i的数字时,循环会提前退出。 创建一个虚拟int或以不同方式处理错误检查。 例如:
static bool errorCheck(string input) {
int temp=0;
if (int.TryParse(input, out temp))
return true;
return false;
}
这个“错误”的发生是因为大小是静态的。
只需返回TryParse的结果,即可进一步简化代码。
static bool checkErr(string input) {
int temp=0;
return int.TryParse(input, out temp);
}
答案 1 :(得分:1)
您还没有包含对我来说至关重要的errorCheck方法。 如果errorCheck返回true,则循环将提前结束。 编辑:哎呀,你确实包含了完整代码的链接。
正如我的前任所说,errorCheck(...)修改了“大小”。也许这就是为什么我仍然使用下划线为成员变量加前缀。这很容易错过。