2016-11-25 9 views
-1

У меня есть задание, где мне нужно создать код для отображения факторов и число, являющееся идеальным и/или простым числом. Я думаю, что у меня есть весь код для запуска моей программы, но когда я доберусь до последней строки (Console.ReadLine()), я ожидаю нажать Enter и выйти из программы. В настоящее время, когда я нажимаю enter, программа показывает, будет ли это простое число и/или совершенное число снова и снова (каждый раз, когда вы нажимаете enter). Таким образом, в основном, он выполняет все после цикла while снова и снова.Console.ReadLine() не выходит из программы в C#

Имейте в виду, что я очень новичок в C#, поэтому некоторые из моих синтаксисов и читаемости могут быть странными. Меня интересуют только ответы, которые помогут мне решить проблему ReadLine. Мои инструкторы помогут мне сделать мой код более читабельным и организованным.

Спасибо за ваш совет! Вот мой код. Я заметил, где ReadLine не закрывает программу:

using System; 

namespace Factorizer.UI 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string input; 
      int num, i, x = 0, sum = 0; 

      while (true) 
      { 
       Console.Write("Enter a number: "); 
       input = Console.ReadLine(); 

       if (int.TryParse(input, out num)) 
       { 
        Console.Write("\nThe factors are: "); 

        for (i = 1; i <= num; i++) 
        { 
         if (num % i == 0) 
         { 
          Console.Write("{0} ", i); 
         } 
        } 
        break; 
       } 
       else 
       { 
        Console.WriteLine("\nThat was not a valid number!\n"); 
       } 
      } 

      for (i = 1; i < num; i++) 
      { 
       if (num % i == 0) 
       { 
        sum = sum + i; 
       } 
       if (sum == num) 
       { 
        Console.Write("\n\n{0} is a perfect number.\n", num); 
       } 
       else 
       { 
        Console.Write("\n\n{0} is not a perfect number.\n", num); 
       } 

      for (i = 2; i <= num/2; i++) 
      { 
       if (num % i == 0) 
       { 
        x++; 
        break; 
       } 
      } 

      if (x == 0 && num != 1) 
      { 
       Console.Write("\n{0} is a prime number.", num); 
      } 

      else 
      { 
       Console.Write("\n{0} is not a prime number.", num); 
      } 
      Console.ReadLine(); //this isn't closing the program! 
      } 
     } 
    } 
} 
+1

Добро пожаловать в Stack Overflow! Похоже, вам нужно научиться использовать отладчик. Пожалуйста, помогите нам с некоторыми [дополнительными методами отладки] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Если у вас все еще есть проблемы после этого, пожалуйста, не забудьте вернуться с более подробной информацией. –

ответ

1

Console.ReadLine() внутри для цикла. Переместите его вниз после следующей скобки.

+0

Я не хочу, чтобы программа выходила автоматически. Я использую Console.ReadLine(), чтобы программа открывалась до тех пор, пока пользователь не наткнулся на ввод. – zee

+0

Я отредактировал свой ответ. –

+0

Я не уверен, но думаю, что 'Console.ReadKey()' будет удалять программу с любой нажатой клавишей. См. Http://stackoverflow.com/questions/11512821/how-to-stop-c-sharp-console-applications-from-closing-automatically – Reborn

1

Просто введите Console.ReadLine(); после этого он находится внутри блока, поэтому он продолжает печатать и удалять из-за того, что у вас есть после блока while, например:

string input; 
     int num, i, x = 0, sum = 0; 

     while (true) 
     { 
      Console.Write("Enter a number: "); 
      input = Console.ReadLine(); 

      if (int.TryParse(input, out num)) 
      { 
       Console.Write("\nThe factors are: "); 

       for (i = 1; i <= num; i++) 
       { 
        if (num % i == 0) 
        { 
         Console.Write("{0} ", i); 
        } 
       } 
       break; 
      } 
      else 
      { 
       Console.WriteLine("\nThat was not a valid number!\n"); 
      } 
     } 

     /*for (i = 1; i < num; i++) 
     {*/ 
      if (num % i == 0) 
      { 
       sum = sum + i; 
      } 
      if (sum == num) 
      { 
       Console.Write("\n\n{0} is a perfect number.\n", num); 
      } 
      else 
      { 
       Console.Write("\n\n{0} is not a perfect number.\n", num); 
      } 

      for (i = 2; i <= num/2; i++) 
      { 
       if (num % i == 0) 
       { 
        x++; 
        break; 
       } 
      } 

      if (x == 0 && num != 1) 
      { 
       Console.Write("\n{0} is a prime number.", num); 
      } 

      else 
      { 
       Console.Write("\n{0} is not a prime number.", num); 
      } 
      Console.ReadLine(); //this isn't closing the program! 
     //} 
+0

как после окончания окончания фигурной скобки? Если я это сделаю, программа запускается снова и снова, без нажатия кнопки. – zee

+0

Получил это, тогда вам это не понадобится, тот, который вы положили после блока while, попробуйте это: –

+0

OK! Догадаться. Перемещено Console.ReadLine(); вниз после следующей скобки И добавил разрыв; где внутри цикла for. – zee

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

  • Нет связанных вопросов^_^