我正在学习C#。我知道如何在C ++中做到这一点,但是我得到了这一行代码的例外:
string
System.IndexOutOfRangeException:“索引在数组的边界之外。”
v[i] = int.Parse(Console.ReadLine());
我想将其从C ++转换为C#:
int[] v = new int[n];
for (int i = 1; i <= n; i++)
{
v[i] = int.Parse(Console.ReadLine());
}
还有更多代码,但我认为这与该问题无关。
答案 0 :(得分:0)
C ++不检查数组索引。另一方面,C#会执行此检查,如果尝试访问索引范围超出相应范围的元素,则会出现异常。
正如所提到的here:
在C ++中,语法上正确的是超过了有效范围 数组的索引。由于访问 超出范围的元素不会导致编译错误,但可以 在运行时导致错误。之所以被允许是因为 索引检查会减慢程序执行速度。
请注意动词“ 可以”,但不确定。但是,绝不建议您在编写C ++代码时不要总是进行自己的检查,因为这可能会引起很大的问题。
答案 1 :(得分:-2)
只需添加将与Christos' explanation一起使用的代码即可。
解决方案:现在,您还从0开始循环,这不会导致异常,并且您不会跳过第一个元素。
请注意,这里您有<
而不是<=
。这是因为数组中的最后一个元素的索引为n-1。
int[] v = new int[n];
for (int i = 0; i < n; i++)
{
v[i] = int.Parse(Console.ReadLine());
}
正如已经提到的,有关此内容的详细说明/比较(在c ++和c#之间),请参见Christos' answer。