#c# #compiler-errors #syntax-error
#c# #ошибки компилятора #синтаксическая ошибка
Вопрос:
Я не знаю почему, но когда я пытаюсь скомпилировать следующий код, я получаю ошибку 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 = amp;)
{
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();
}
Я буду рад, если кто-нибудь, наконец, сможет мне это объяснить…
Комментарии:
1. как насчет того, что при проверке равенства вы используете
==
not=
2. и вам понадобятся знаки и — в кавычках, поскольку они являются символами —
while (opper == ' ')
Ответ №1:
Учитывая строки (например)
opper = Convert.ToChar(Console.ReadLine());
while (opper = )
Похоже, вы пытаетесь сравнить ввод символов с оператором. Вы захотите изменить оператор присваивания на оператор сравнения и сравнить символ с другим символом, например:
opper = Convert.ToChar(Console.ReadLine());
while (opper == ' ')
Ответ №2:
пользователь1673882 здесь прав в отношении причины ошибки компиляции. Однако есть несколько других существенных ошибок, о которых вы также должны знать.
Что касается исходной проблемы с компиляцией, у вас есть две проблемы со следующей строкой (и всеми подобными строками);
while (opper = )
Во-первых, =
(одиночный знак «равно») — это присваивание, а не сравнение. Вместо этого вы хотите использовать ==
here .
Во-вторых,
в данном случае это не символ, а операция. (На самом деле, компилятор не может точно определить, какой оператор это может быть).
Даже если вы скомпилируете это, это не сработает, потому что все ваши циклы являются бесконечными циклами. Рассмотрим этот пример:
char myChar = 'a';
// Infinite loop
while (myChar == 'a')
{
Console.WriteLine("Test");
}
Как это может выйти из цикла, учитывая, что myChar
так будет всегда a
?
Далее следует несколько других разных ошибок:
subb = subb Convert.ToInt16(arr[i]);
Это можно сократить с помощью
subb = Convert.ToInt16(arr[i]);
или, возможно, даже
subb = (short)arr[i];
Кроме того, я предполагаю, что это не должно быть » «, поскольку это точно такая же операция, которую вы выполняете, если операция » » (т. Е. Результат » » и «-» должен быть точно таким же).
x = x / Convert.ToInt16(arr[i]);
Во-первых, такая же очистка, как указано выше:
x /= (short)arr[i];
Во-вторых, здесь вы никогда не проверяете деление на 0, поэтому это может вызвать исключение.
В-третьих, я не уверен, что такое тип x, но «short» определенно не закрывается по делению, т.е.:
short a = ...
short b...
// May not be another short
Console.WriteLine(a / b);
На самом деле, это в некоторой степени относится и к умножению, вычитанию и сложению, поскольку короткие значения имеют конечный размер. Рассмотрим следующий код:
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;