int a = System.Console.Read();
System.Console.WriteLine(a);
Consile.Read()
Вот код:
Код:
Но значение переменной "a" выводится в консоль совсем не тем, котоым вводил. Выводится какое-то совершенно левое число. А как же тогда правильно считывать данные с клавиатуры?
int Console.Read()
читает с терминала не число, а код следующего символа в терминале.
Для более удобного чтения пользуйся Console.In, а для записи - Console.Out.
Модифицированный мною пример из MSDN:
Код:
using System;
using System.IO;
class InTest {
public static void Main() {
TextReader tIn = Console.In;
TextWriter tOut = Console.Out;
tOut.WriteLine("Hola Mundo!");
tOut.Write("What is your name: ");
string name = tIn.ReadLine();
tOut.Write("How old are you: ");
int age = int.Parse(tIn.ReadLine());
tOut.WriteLine("You are, {0} years old.", age);
tOut.WriteLine("Buenos Dias, {0}!", name);
}
}
using System.IO;
class InTest {
public static void Main() {
TextReader tIn = Console.In;
TextWriter tOut = Console.Out;
tOut.WriteLine("Hola Mundo!");
tOut.Write("What is your name: ");
string name = tIn.ReadLine();
tOut.Write("How old are you: ");
int age = int.Parse(tIn.ReadLine());
tOut.WriteLine("You are, {0} years old.", age);
tOut.WriteLine("Buenos Dias, {0}!", name);
}
}
Код:
using System;
using System.Collections.Generic;
using System.Text;
namespace CodeForumCistern
{
class Program
{
public static void Main(string[] args)
{
Console.Write("Введите число: ");
double bulk = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Вы ввели: {0}", bulk);
}
}
}
using System.Collections.Generic;
using System.Text;
namespace CodeForumCistern
{
class Program
{
public static void Main(string[] args)
{
Console.Write("Введите число: ");
double bulk = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Вы ввели: {0}", bulk);
}
}
}
Да, большое спасибо, тут я понял. Но если мне надо прямо на этапе ввода осуществить контроль за вводом, например чтобы пользователь мог вводить только цифры, а на нажатия других клавиш небыло "реакции"(с точки зрения пользователя). Похоже, что тут придётся использовать скан-код или можно как-то еще?
Код:
static int ReadKoeff()
{
StringBuilder SB = new StringBuilder();
ConsoleKeyInfo KeyInfo;
do
{
KeyInfo = System.Console.ReadKey(false);
char c = KeyInfo.KeyChar;
if ((c >= 47 && c <= 56)|(c == 45)) SB.Append(c);
} while (KeyInfo.Key != ConsoleKey.Enter);
return (Convert.ToInt32(SB.ToString()));
}
{
StringBuilder SB = new StringBuilder();
ConsoleKeyInfo KeyInfo;
do
{
KeyInfo = System.Console.ReadKey(false);
char c = KeyInfo.KeyChar;
if ((c >= 47 && c <= 56)|(c == 45)) SB.Append(c);
} while (KeyInfo.Key != ConsoleKey.Enter);
return (Convert.ToInt32(SB.ToString()));
}