2015-01-04 1 views
-1

Новобранец в него, я не могу правильно ввести ввод с помощью следующего кода.Невозможно принять ввод в правильном формате в C#

int id; 
string name; 
float duration; 
float price; 

Console.WriteLine("Enter the movie id"); 
id = Convert.ToInt16(Console.Read()); 

Console.WriteLine("Enter the movie name"); 
name = Console.ReadLine(); 

Console.WriteLine("Enter the movie duration"); 
duration = Convert.ToInt32(Console.Read()); 

Console.WriteLine("Enter the movie price"); 
price = Convert.ToInt32(Console.Read()); 

bl.addMovie(id, name, duration, price); 
+0

В чем проблема или ошибка? – Sajeetharan

+0

Вы используете преобразование ToInt16 на id, есть ли какая-то особая причина для этого. –

+2

Замените 'Console.Read' на' Console.ReadLine', попробуйте еще раз, а затем обновите свой вопрос с результатами (похоже, что у вас все еще есть некоторые проблемы, но это должно исправить некоторые из них). –

ответ

2

Только для чтения принимает следующий символ.

Try:

float price; 
Console.WriteLine("Enter the movie price"); 
string input = Console.ReadLine(); 
int successStatus = float.TryParse(input, out price); 
bool success = successStatus != 0; 

Или просто:

float price; 
Console.WriteLine("Enter the movie price"); 
price = (float) Convert.ToDouble(Console.Readline()) 

Первый является предпочтительным, поскольку он лучше при обработке ошибок при разборе. См. documentation. float.TryParse является синонимом Single.TryParse

+0

«лучше обрабатывать ошибки при разборе», но в примере нет обработки ошибок, поэтому в текущей форме первая на самом деле хуже, поскольку она скрывает недействительные входы. –

+0

У TryParse есть внутренняя обработка. –

1

то, что вам нужно сделать, это проверить каждый вход, чтобы быть тем, что вы хотите, это один из способов

static void Main(string[] args) 
{ 
    int id; 
    string name; 
    float duration; 
    float price; 

    do 
    { 
    Console.WriteLine("Enter the movie id"); 
    } 
    while(!int.TryParse (Console.ReadLine(), out id)); 

    Console.WriteLine("Enter the movie name"); 
    name = Console.ReadLine(); 

    do 
    { 
     Console.WriteLine("Enter the movie duration"); 
    } 
    while (!float.TryParse(Console.ReadLine(), out duration)); 

    do 
    { 
     Console.WriteLine("Enter the movie price"); 
    } 
    while (!float.TryParse(Console.ReadLine(), out price)); 

    Console.WriteLine("{0}, {1}, {2}, {3}", id, name, duration, price); 

    Console.ReadKey(); 
} 
4

Проблема заключается в том, что Console.Read возвращает int, который представляет следующий входной символ. Итак, что происходит, вы вводите несколько символов и нажимаете Enter, а Read возвращает один символ. Затем ReadLine возвращает остальные символы в качестве строки.

Замените ваши звонки на Read, позвонив по телефону ReadLine.

0
This worked fine.Use the Console.ReadLine. 

    int id; 
      string name; 
      float duration; 
      float price; 

      Console.WriteLine("Enter the movie id"); 
      id = Convert.ToInt16(Console.ReadLine()); 

      Console.WriteLine("Enter the movie name"); 
      name = Console.ReadLine(); 

      Console.WriteLine("Enter the movie duration"); 
      duration = Convert.ToInt32(Console.ReadLine()); 

      Console.WriteLine("Enter the movie price"); 
      price = Convert.ToInt32(Console.ReadLine()); 
Смежные вопросы