Чтение пользовательского ввода с консоли
Я хочу, чтобы число от пользователя было затем несколько с номером Pi, которое было присвоено числу. Я попробовал такую вещь, как показано ниже. Но a
содержит тарабарщину. Например, если я вставляю 22
, a содержит 50
.
double a,b;
a = Console.Read();
b = a * Math.PI;
Console.WriteLine(b);
Ответы
Ответ 1
Я не уверен, в чем проблема (поскольку вы не сказали нам), но я предполагаю, что
a = Console.Read();
Это будет читать только один символ из вашей консоли.
Вы можете изменить свою программу на это. Чтобы сделать его более надежным, примите более 1 вход char и подтвердите, что ввод фактически является числом:
double a, b;
Console.WriteLine("istenen sayıyı sonuna .00 koyarak yaz");
if (double.TryParse(Console.ReadLine(), out a)) {
b = a * Math.PI;
Console.WriteLine("Sonuç " + b);
} else {
//user gave an illegal input. Handle it here.
}
Ответ 2
a = double.Parse(Console.ReadLine());
Помните, что если пользователь вводит что-то, что не может быть разобрано в double, будет выведено исключение.
Edit:
Чтобы расширить мой ответ, причина, по которой он не работает для вас, заключается в том, что вы получаете ввод от пользователя в строчном формате и пытаетесь перенести его в двойное. Вы не можете этого сделать. Вы должны сначала извлечь двойное значение из строки.
Если вы хотите выполнить некоторую проверку ошибок, просто выполните следующее:
if ( double.TryParse(Console.ReadLine(), out a) ) {
Console.Writeline("Sonuç "+ a * Math.PI;);
}
else {
Console.WriteLine("Invalid number entered. Please enter number in format: #.#");
}
Спасибо Öyvind и abatischev за помощь в уточнении моего ответа.
Ответ 3
string input = Console.ReadLine();
double d;
if (!Double.TryParse(input, out d))
Console.WriteLine("Wrong input");
double r = d * Math.Pi;
Console.WriteLine(r);
Основная причина различного ввода/вывода, с которой вы сталкиваетесь, заключается в том, что Console.Read()
возвращает char код, а не номер, который вы набрали! Узнайте, как использовать MSDN.
Ответ 4
Я думаю, что есть некоторые ошибки компилятора.
- Writeline должна быть WriteLine (capital 'L')
-
отсутствует точка с запятой в конце строки
double a, b;
Console.WriteLine("istenen sayıyı sonuna .00 koyarak yaz");
a = double.Parse(Console.ReadLine());
b = a * Math.PI; // Missing colon!
Console.WriteLine("Sonuç " + b);
Ответ 5
string str = Console.ReadLine();
double a = double.Parse(str);
double b = a * Math.pi;
Console.WriteLine("{0}", b);
Console.Read()
читает строку из консоли. ОДИНОЧНЫЙ ХАРАКТЕР В ВРЕМЯ (но ждет ввода перед продолжением. Обычно вы используете его в цикле while
). Поэтому, если вы напишете 25
+ Enter, он вернет значение unicode 2
, которое 50
. Если вы повторите второй Console.Read()
, он немедленно вернется с 53
(значение unicode 5
). Третий и четвертый Console.Read()
возвращают символы конца строки/каретки. Пятый ждет нового ввода.
Console.ReadLine()
читает a string
(поэтому вам нужно изменить строку на double
)
Ответ 6
Вам не хватает точки с запятой: double b = a * Math.PI;
Ответ 7
double a,b;
Console.WriteLine("istenen sayıyı sonuna .00 koyarak yaz");
try
{
a = Convert.ToDouble(Console.ReadLine());
b = a * Math.PI;
Console.WriteLine("Sonuç " + b);
}
catch (Exception)
{
Console.WriteLine("dönüştürme hatası");
throw;
}
Ответ 8
Когда-нибудь в будущем .NET4.6
//for Double
double inputValues = double.Parse(Console.ReadLine());
//for Int
int inputValues = int.Parse(Console.ReadLine());