2016-03-15 3 views
-2
class Program 
{ 
    static void Main(string[] args) 
    { 
     int par = 3; 
     int strokes = 4; 
     int score; 

     Console.Write("Enter Score "); 

     par = Convert.ToInt32(Console.ReadLine()); 
     strokes = Convert.ToInt32(Console.ReadLine()); 
     score = Convert.ToInt32(Console.ReadLine()); 

     ***bool parse = int.TryParse(strokes, out score);*** 

     if (score < par) 
      Console.WriteLine("Score is below par."); 
     else if (score > par) 
      Console.WriteLine("Score is above par."); 
     else if (score == par) 
      Console.WriteLine("Score is equal to par."); 
    }  
} 

Привет, Я пытаюсь, чтобы значение штрихов становилось значением оценки, так что когда пользователь вводит количество ударов, которые они сделали, он преобразуется в счет ... Код, который я выделенный bool parse = int.TryParse(strokes, out score); работал раньше в другой программе. Однако на этом он говорит мне, что я не могу преобразовать строку в int. Который я думал, что я сделал с: strokes = Convert.ToInt32(Console.ReadLine());Передача переменных (C#)

Будьте любезны! Я новичок в этом.

+0

Вы пытаетесь разобрать 'int'. 'TryParse' ожидает строку. Я бы предположил, что вы можете полностью удалить линию, и она должна работать. – Rob

+1

Данные 'strokes' и' score' являются как 'int', так и не просто' strokes = score; '? – John3136

+0

Latoya Emmer, Пожалуйста, будь красивой - если вы напишете какой-то странный код (например, 'int.TryParse (int, out int)'), будьте терпеливы и объясните, почему это важно для вас. –

ответ

0

У вас есть синтаксическая проблема, а также семантическая проблема. Во-первых, вы объявили strokes как int.

int strokes = 4; 

Затем вы назначили его (это хорошо)

strokes = Convert.ToInt32(Console.ReadLine()); 

Наконец, вы пытаетесь разобрать его как INT, который она уже есть.

bool parse = int.TryParse(strokes, out score); 

Синтаксический int.TryParse ожидает параметр string, где вы отправляете ему int параметра. Вы всегда можете обратиться к the documentation о методе, который вы используете для уточнения.

Однако, семантически, у вас уже есть int, и они пытаются разобрать его как int, что является неправильным и избыточным. TryParse следует использовать, когда у вас есть строка, которую вы считают, чтобы быть int, но хотите проверить, не выбрасывая исключение. В случае с этим кодом вы можете использовать TryParse на входе пользователя, чтобы убедиться, что они дали вам int, а не напрямую его лить.

0

Фактически Convert.To..() выдаст FormatException, если входная строка не будет конвертирована в тип адресата. Вещь, которую вы делаете неправильно, заключается в том, что через эту строку (strokes = Convert.ToInt32(Console.ReadLine());) вы конвертируете ввод в integer, и снова вы собираетесь выполнять синтаксический анализ.

Примечание: На входе Int32.TryParse() должен быть строкой и целая переменным, как из паров. в вашем случае оба являются целыми числами.

Я предлагаю вам следующий способ сделать это в лучшую сторону:

static void Main(string[] args) 
    { 
     int par = 3; 
     int strokes = 4; 
     int score; 
     Console.Write("Enter Score "); 
     if (!Int32.TryParse(Console.ReadLine(), out par)) 
     { 
      Console.WriteLine("invalid input; conversion failed"); 
     } 
     if (!Int32.TryParse(Console.ReadLine(), out strokes)) 
     { 
      Console.WriteLine("invalid input; conversion failed"); 
     } 
     if (!Int32.TryParse(Console.ReadLine(), out score)) 
     { 
      Console.WriteLine("invalid input; conversion failed"); 
     } 
     // Now you will get all values; so you can proceed 
     if (score < par) 
      Console.WriteLine("Score is below par."); 
     else if (score > par) 
      Console.WriteLine("Score is above par."); 
     else if (score == par) 
      Console.WriteLine("Score is equal to par."); 
    } 
0

После мастерить с кодом ANS с помощью пользовательского ввода, я нашел решение.

{ 
     int par = 3; 
     int strokes = 4; 

     Console.WriteLine("Enter Score "); 
     strokes = Convert.ToInt32(Console.ReadLine()); 

     if (strokes < par) 
      Console.WriteLine("Score is below par."); 

      else if (strokes > par) 
       Console.WriteLine("Score is above par."); 

        else if (strokes == par) 
         Console.WriteLine("Score is equal to par."); 

    } 
Смежные вопросы