У меня возникла проблема: я должен ввести числа с клавиатуры внутри цикла 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...
Я не понимаю, где я ошибся. Помогите, пожалуйста.
Метод 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);
Ссылки по теме:
Продвижение своими сайтами как стратегия роста и независимости