Неожиданный результат при суммировании чисел с использованием циклов while в консольном приложении - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь составить программу для суммирования чисел, пока пользователь не введет ОК. Программа вносит сумму, но возвращает плохой результат.

Я не уверен, где моя ошибка ...

int sum = 0;
Console.WriteLine("Enter number:");
int num = Convert.ToInt32(Console.ReadLine());
while (Console.ReadLine() != "OK")
    {
       sum += num; 
    }
Console.WriteLine(sum);

Ответы [ 4 ]

0 голосов
/ 29 июня 2018
int sum = 0;
Console.WriteLine("Enter number:");
int num = int.Parse(Console.ReadLine());
while (sum< num)
{
     sum++;
}
Console.WriteLine(sum);
0 голосов
/ 28 июня 2018

Внутри вашего while цикла вам нужно обновить num:

int num = Convert.ToInt32(Console.ReadLine());
while (Console.ReadLine() != "OK")
{
    num = Int32.Parse(Console.ReadLine());
    sum += num; 
}

Также в качестве примечания: если вы хотите, чтобы ваша программа была немного более безопасной, вы можете использовать следующее:

int num;
if(Int32.TryParse(Console.ReadLine(), out num)) {
    //do something.. 
}
else {
    //do something else.. like end program, throw exception etc.
}

Int32.TryParse:

Преобразует строковое представление числа в его 32-разрядное знаковое целочисленный эквивалент. Возвращаемое значение указывает, является ли преобразование удалось

Таким образом, вы можете сделать что-то в том случае, если ввод string не был допустимым преобразованием. Пример: если кто-то введет cat, который не может быть преобразован в int, это приведет к краху вашей программы без TryParse.

0 голосов
/ 28 июня 2018

Вам нужно вводить число один раз за итерацию и сохранять его каждый раз. Таким образом, каждое значение, полученное из Console.ReadLine(), должно быть зафиксировано в операторе присваивания, а затем преобразовано в число, если оно не «ОК».

Я думаю, что вы после этого:

int sum = 0;
string input;

Console.WriteLine("Enter number: ");
while ((input = Console.ReadLine()) != "OK")
{
    int inputNum = Convert.ToInt32(input);
    sum += num;

    Console.WriteLine("Enter number: ");
}

Оператор (input = Console.ReadLine() присваивает пользовательский ввод переменной input, затем оператор присваивания возвращает значение input. Затем это значение сравнивается с OK. Альтернативный способ получить ввод, затем проверить это:

Console.WriteLine("Enter number: ");
input = Console.ReadLine()
while (input != "OK")
{
    ...
    Console.WriteLine("Enter number: ");
    input = Console.ReadLine()
}
0 голосов
/ 28 июня 2018

вы не сохраняете число, которое вводите в цикле while. вам нужно ввести readline в переменную.

var num = Console.Readline();
sum += num; //parse first
...