错误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();
}

如果有人能给我解释一下,我会很高兴的。

错误CS1525为什么会发生

给定行(例如)

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;