错误CS1525为什么会发生
本文关键字:为什么 CS1525 错误 | 更新日期: 2023-09-27 18:11:32
我不知道为什么,但当我试图编译下一个代码时,我得到错误CS1525和每个)
在每个while命令的末尾被标记为错误:
static void PrintArray(string[] arr)
{
int i, sum = 0, subb = 0, pow, x;
char opper;
Console.WriteLine("how many numbers does your calculation have?");
i = Convert.ToInt16(Console.ReadLine());
arr = new string[i];
for (i = 0; i < arr.Length; i++)
{
Console.WriteLine("enter num {0}" + i);
arr[i] = Console.ReadLine();
Console.WriteLine("arr[{0}] = {1}" + i, arr[i]);
}
Console.WriteLine("what do you want to do?");
opper = Convert.ToChar(Console.ReadLine());
while (opper = +)
{
for (i = 0; i < arr.Length; i++)
{
sum = sum + Convert.ToInt16(arr[i]);
}
Console.WriteLine("your sum is " + sum);
}
while (opper = -)
{
for (i = 0; i < arr.Length; i++)
{
subb = subb + Convert.ToInt16(arr[i]);
}
Console.WriteLine("your subb is" + subb);
}
while (opper = *)
{
pow = Convert.ToInt16(arr[0]);
for (i = 1; i < arr.Length; i++)
{
pow = pow * Convert.ToInt16(arr[i]);
}
Console.WriteLine("the resolt is " + pow);
}
while (opper = &)
{
x = Convert.ToInt16(arr[i]);
for (i = 0; i < arr.Length; i++)
{
x = x / Convert.ToInt16(arr[i]);
}
Console.WriteLine("your resolt is " + x);
}
Console.ReadKey();
}
如果有人能给我解释一下,我会很高兴的。
给定行(例如)
opper = Convert.ToChar(Console.ReadLine());
while (opper = +)
看起来你试图将字符输入与操作符进行比较。您需要将赋值操作符更改为比较操作符,并将字符与另一个字符进行比较,如下所示:
opper = Convert.ToChar(Console.ReadLine());
while (opper == '+')
user1673882在这里关于编译错误的原因是正确的。但是,还有其他几个重要的错误您也应该注意。
对于最初的编译问题,以下行(以及所有类似的行)有两个问题;
while (opper = +)
首先,=
(单个"等于"号)是赋值,不是比较。您应该在这里使用==
。
其次,+
在这里不是一个字符,它是一个操作。(实际上,编译器不能准确地推断出是哪个操作符)。
即使你编译了这个,它也不会工作,因为你所有的循环都是无限循环。考虑这个例子:
char myChar = 'a';
// Infinite loop
while (myChar == 'a')
{
Console.WriteLine("Test");
}
既然myChar
总是是a
,这个怎么可能从循环中跳出来呢?
还有一些其他的bug:
subb = subb + Convert.ToInt16(arr[i]);
可以用
缩短subb += Convert.ToInt16(arr[i]);
甚至
subb += (short)arr[i];
另外,我假设这不应该是"+",因为如果操作是"+",这与您正在做的操作完全相同(即"+"answers"-"的结果应该完全相同)。
x = x / Convert.ToInt16(arr[i]);
首先,与上面相同的清理:
x /= (short)arr[i];
其次,这里没有测试除0,所以这可能会抛出异常。
第三,我不确定x是什么类型,但"短"肯定是不是封闭的除法-即:short a = ...
short b...
// May not be another short
Console.WriteLine(a / b);
实际上,这在某种程度上也适用于乘法、减法和加法,因为short的大小是有限的。考虑下面的代码:
short overflow = short.MaxValue;
// -32768
overflow++;
// +32767
overflow--;
// -32768 again
overflow++;
// -32767
overflow++;
checked
{
overflow = short.MaxValue;
// Now this results in an OverflowException
overflow++;
}
再举一个例子:
short testArithmetic = 1;
// This gives us the result that 1 / 2 = 0.
testArithmetic /= 2;
// Set this back to 1 for the next operation
testArithmetic = 1;
// This is 0.0 too!
double testArithmeticFloat = testArithmetic / 2;
// This gives us the result we'd expect
testArithmeticFloat = 1.0 / 2.0;
// This'll compile just fine, but you get a DivideByZeroException when you try to execute it
testArithmetic /= 0;