Употреба на Console.Read(), Console.ReadLine и Console.ReadKey
Работя над Employee Data от домашното. По принцип мога да я направя, но има някои детайли, които ме човъркат и искам да си ги обясня. Ето кода:
Console.Write("Please enter employee's first name: ");
string firstName = Console.ReadLine();
Console.Write("Please enter employee's last name: ");
string lastName = Console.ReadLine();
Console.Write("Please enter employee's age: ");
byte age = byte.Parse(Console.ReadLine());
Console.Write("Please enter employee's gender(m/f): ");
string gender = Console.ReadLine();
Console.Write("\nPlease enter employee's personal ID number: ");
string personalIDNumber = Console.ReadLine();
Console.Write("Please enter employee's unique number: ");
string uniqueEmployeeNumber = Console.ReadLine();
...........print the info.......
Така написана, програмата работи, но искам да декларирам променливата gender като char. Console.Readline() не иска да ми я конвертира, дори с изрично кастване:
char gender = (char)Console.ReadLine();
Дава ми грешка, че не може да конвертира string в char.
Опитах с Console.Read, четох в книгата на Наков за функцията, но не я разбрах добре. Опитах следното:
char gender = Console.Read();
gender = Convert.ToChar(gender);
при този вариант ми дава правилна стойност на gender, но се получава следния бъг - не ми дава да въведа стойност за следващата променлива personalIDNumber и направо ме прехвърля на uniqueEmployeeNumber.
Може директно да се въведе Char с Console.ReadKey(), но тогава въвеждането става без натискане на Enter, което може да е объркващо за потребителя, понеже останалите променливи се въвеждат след натискане на Enter.
Домашното спокойно може да бъде написано, като gender се декларира като string, но съм се заинатил да намеря начин да го декларирам като char. Някой знае ли как да стане?
Благодаря предварително!
Не всички знаят че прасето го има във всички типове данни,затова никой не ти е казал до сега но char.Parse(Console.ReadLine());,което спомена колегата, е най добрия начин да изискваш от потребителя чарове.Изисква Enter защот трябва да зададеш края на инпута,който въвеждаш за да започне парсването(да заколиш прасето).
Не се учете да използвате ReadKey() и Read(), няма да ви трябва за изпита,a най много да го използвате в задаване на някоя функция когато правите игра например(но затова в ниво 1)
Regarts and keep coding
Благодаря за отговора, това като че ли е най-удачното решение. Ползвал съм парсване за присвояване на числена стойност, но нямах представа, че работи и при char. А Console.Read() така и не разбрах как работи. Доколкото разбирам, ентър прекъсва пълненето на буфера и после трябва да се конвертират символите от въпросния буфер някак си. Но защо взема и ентъра и кой му казва да го конвертира. Пълна мъгла е.
Може и да не трябва за изпита, но бих се радвал да разбера логиката на метода.