2016-12-24 1 views
-2

Спасибо за все ответы, это действительно помогло мне!Код не может рассчитывать процент

Но я столкнулся с новой проблемой ... В программе, которую я пишу, пользователю предлагается ввести ответы на разные математические вопросы, и консоль после каждого вопроса скажет, соответствуют ли ответы правильные или неправильные. И в конце программа покажет, сколько ответов пользователей было правильным в процентах, это было, если я столкнулся с проблемой.

Console.Write("How many questions would you like to answer (Maximum value is '100'): "); 
     string input = Console.ReadLine(); 
     int questionsAmount = int.Parse(input); 

     int correctAnswers = 0; 
     int IncorrectAnswers = 0; 

     for (int i = 1; i <= questionsAmount; i++) 
     { 
      Console.WriteLine("==================="); 
      Console.WriteLine("Question " + i); 
      Console.WriteLine(); 

      Random rnd = new Random(); 
      int rndNumber = rnd.Next(1, 100); 
      int rndNumber2 = rnd.Next(1, 100); 

      Console.Write("What equals " + rndNumber + " + " + rndNumber2 + " = "); 
      string input2 = Console.ReadLine(); 
      int answer = int.Parse(input2); 

      if (answer == rndNumber + rndNumber2) 
      { 
       correctAnswers++; 
       Console.WriteLine("Answer correct."); 
       Console.WriteLine("Correct answers: " + correctAnswers); 
      } 
      else 
      { 
       IncorrectAnswers++; 
       Console.WriteLine("Answer incorrect."); 
       Console.WriteLine("Incorrect answers: " + IncorrectAnswers); 
      } 
     } 
     double percentage = correctAnswers/questionsAmount * 100; 
     Console.WriteLine(percentage + "% of your answers was correct"); 

Как вы видите, когда все вопросы были даны ответы будет вычислить процент, но так как я присвоил переменную «correctAnswers» в значение «0», то расчет будет выглядеть следующим образом: 0/x * 100 = 0

Если я поставил переменные «правильные» и «неправильные» в пределах for-statement, линия double percentage = correctAnswers/questionsAmount * 100; не будет работать.

+0

Параметр 'примерку catch' это хорошо, это ваша логика цикла, который не – MickyD

+1

обработки исключений может быть намного хуже, чем используя 'goto'. Именно здесь вы полностью потеряли контроль над потоком программы и больше не понимаете, как работает ваша программа.Обработка исключения должна быть исключительной, нет ничего особенного в том, что пользователь вводит неверные данные. Поэтому не используйте исключения, вместо этого используйте 'int.TryParse()'. –

ответ

2

Предложение catch будет выполняться только в том случае, если выбрано исключение. Вы хотите поставить логику «неправильного ответа» в обычное предложение else.

while (true) 
    { 
     try 
     { 
      Console.Write("What equals " + rndNumber1 + " + " 
          + rndNumber2 + ": "); 
      string input = Console.ReadLine(); 
      int answer = int.Parse(input); 

      if (answer == rndNumber1 + rndNumber2) 
      { 
       Console.WriteLine("Your answer is correct."); 
       break; 
      } 
      else 
      { 
       Console.WriteLine("Your answer is incorrect. Try again."); 
       Console.ReadLine(); 
      } 
     } 
     catch 
     { 
      { 
       Console.WriteLine("Sorry, something went wrong."); 
      } 
     } 
    } 
+0

Конечно, как глупо со мной. Большое спасибо, сэр! – Nick

+0

совсем не глупо, просто учиться! не беспокойся. –

1

Вы ищете else блок, а не catch блок:

while (true) 
{ 
    Console.Write("What equals " + rndNumber1 + " + " + rndNumber2 + ": "); 
    string input = Console.ReadLine(); 
    int answer = int.Parse(input); 

    if (answer == rndNumber1 + rndNumber2) 
    { 
     Console.WriteLine("Your answer is correct."); 
     break; 
    } 
    else 
    { 
     Console.WriteLine("Your answer is incorrect. Try again."); 
    } 
} 

Try/улов для обработки исключений , не логика приложения. if пар с else, а не с catch.

Например, если вы пытаетесь int.Parse() значение, которое не является целым числом (например, строка символов), то что будет сгенерировано исключение, и вы можете справиться с что в catch блоке. (Или используйте int.TryParse() во избежание исключения.)

1

Поместите разделы кода, которые могут генерировать исключения в блоке try и place, который обрабатывает исключения в блоке catch. Блок catch представляет собой серию операторов, начинающихся с catch catch, а затем тип исключения и действие, которое необходимо предпринять.
Вы можете вывести приглашение «неправильного ответа» в части else, как показано ниже. Попробуйте уловить statemnts для выполнения строк исключения кода. Что вы тестируете, не является исключением при выполнении кода. Это просто переменная, которая не равна другой. Блок управления

{ 
      Random rnd = new Random(); 
      int rndNumber1 = rnd.Next(1, 100); 
      int rndNumber2 = rnd.Next(1, 100); 

      while (true) 
      { 
       try 
       { 
        Console.Write("What equals " + rndNumber1 + " + " + rndNumber2 + ": "); 
        string input = Console.ReadLine(); 
        int answer = int.Parse(input); 

        if (answer == rndNumber1 + rndNumber2) 
        { 
         Console.WriteLine("Your answer is correct."); 
         break; 
        }else{ 
    Console.WriteLine("Your answer is incorrect. Try again."); 
    } 
       } 
       catch 
       { 

       } 
      } 
     } 
0

try...catch используется для обработки exeptions, это означает, что код будет переходить к cath части, когда encountred неожиданная ошибка. В вашем коде эта часть Console.WriteLine("Your answer is correct."); будет выполняться только при возникновении ошибки времени выполнения, например. int.Parse() не может проанализировать значение.

Когда вы пытаетесь сравнить значения, которые вы должны использовать структуру if потока

{ 
    Random rnd = new Random(); 
    int rndNumber1 = rnd.Next(1, 100); 
    int rndNumber2 = rnd.Next(1, 100); 

    while (true) 
    { 
      Console.Write("What equals " + rndNumber1 + " + " + rndNumber2 + ": "); 
      string input = Console.ReadLine(); 
      int answer = int.Parse(input); 

      if (answer == rndNumber1 + rndNumber2) 
      { 
       Console.WriteLine("Your answer is correct."); 
       break; 
      } 
      else 
      { 
       Console.WriteLine("Your answer is incorrect. Try again."); 
      } 
    } 
}