Ввод чисел с клавиатуры внутри цикла в C#

196
02 февраля 2020, 08:40

У меня возникла проблема: я должен ввести числа с клавиатуры внутри цикла for. Мой код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Untitled_31
{
    class Program
    {
        static void Main(string[] args)
        {
            string value;
            for (int i = 0; i <= 8; i++)
            {
                value = Convert.ToString(Console.Read());
                Console.WriteLine($"i = {i}");
            }
            Console.Write("Press any key to exit the program...");
            Console.ReadKey();
        }
    }
}

По идеи, я должен вводить числа с клавиатуры на каждой итерации цикла, но вместо этого я получаю следующее:

9
i = 0
i = 1
i = 2
5
i = 3
i = 4
i = 5
7
i = 6
i = 7
Press any key to exit the program...

Я не понимаю, где я ошибся. Помогите, пожалуйста.

Answer 1

Метод Read читает один символ и возвращает управление вам в программу. На входе один символ, если вы хотите число, то это будет "цифра" - число от 0 до 9, а вот больше вы не введёте.

Метод ReadLine читает "строку" - символы, пока вы не нажмёте Enter.

При этом поскольку вы о таких особенностях стандартной библиотеки не знали, не приходило в голову ввести число больше 10, вводить достаточно медленно - у вас и возникали подозрения, что "работает как-то не так". Но это как-то не так пустило вас по ложному следу.

Попробуйте мысленно отдебажить вашу программу, а также вот эти и понять разницу:

    static void Main(string[] args)
    {
        int i;
        while ((i = Console.Read()) != 0)
        {
            Console.WriteLine("{0}={1}", i, (char)i);
        }
        Console.ReadKey();
    }

и такую:

        string s = Console.ReadLine();
        Console.WriteLine("Your input is {0}.", s);

Ссылки по теме:

  • Console.Read
  • Console.ReadLine
  • https://social.msdn.microsoft.com/Forums/en-US/5515c215-6701-4a05-ba0a-9cd63ef206df/difference-between-readreadline-and-readkey-in-c?forum=csharpgeneral
  • Difference between Console.Read() and Console.ReadLine()?
READ ALSO
Неверный порядок в структуре json(newtonsoft) c# winforms

Неверный порядок в структуре json(newtonsoft) c# winforms

Я сохраняю в json-файл введённые данныеТак же есть блоки, которых может быть неограниченное количество(динамические), которые я добавляю по нажатии...

185
Ввод данных в массив класса c#

Ввод данных в массив класса c#

Есть метод LoadStudents, который записывает в массив класса Student объекты с некоторыми полямиНеобходимо разработать метод (я пытался, назвал его...

249
C# получить данные с сайта с авторизацией

C# получить данные с сайта с авторизацией

у меня есть учетка на неком сайтетам выполняется аякс запрос типа script

188
Алгоритм для изменения формы 2D mesh&#39;a

Алгоритм для изменения формы 2D mesh'a

В 3D пространстве есть двумерный Mesh определенной формы, играющий роль полаЕсть объект, который перемещается по сцене, непосредственно над...

202