Что-то не так с использованием пустого цикла for? - PullRequest
8 голосов
/ 03 мая 2011

Прошло немного времени с тех пор, как я последний раз программировал, и я, кажется, забыл, допустимо ли использовать пустой цикл for для создания бесконечного цикла?

for(;;)

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

Чтобы завершить программу, у меня есть операторы "if", которые проверяют, является ли введенное пользователем значение равным нулю, если значение равно нулю, программазавершается с помощью «Return 0;»аргумент.

Программа проверяет каждое вводимое пользователем значение, если оно равно нулю непосредственно после того, как значение было присвоено переменной.


Итак, реальный вопрос: правильный ли это способзаставить мою программу делать то, что я описал?Или есть более / лучший / принятый способ программирования этого?

И, во-вторых, есть ли что-то не так с использованием аргумента «Возврат 0», как я делал в этой программе?

Если выдумает, что трудно понять, что я написал или имел в виду, пожалуйста, ответьте, и мне потребуется больше времени, чтобы написать все.

Ответы [ 9 ]

5 голосов
/ 03 мая 2011

Я всегда использую while(true) для бесконечных циклов

5 голосов
/ 03 мая 2011

То, что вы делаете, прекрасно, идиоматический способ написания и выхода из бесконечного цикла.

2 голосов
/ 03 мая 2011

Я видел это в нескольких местах:

#define forever for(;;)

forever {

}

Не уверен, что я рекомендую это все же.

2 голосов
/ 03 мая 2011

for(;;), а также while(1) оба приемлемы. Это всего лишь условные циклы, предоставляемые языком, и вы можете использовать их, чтобы иметь бесконечный рабочий цикл согласно вашему требованию.

2 голосов
/ 03 мая 2011

Это действительно, вы можете продолжить с вашим кодом.

1 голос
/ 03 мая 2011

Да, это полностью приемлемо.Если у вас есть условие выхода (break или return) в цикле, вы можете сделать цикл "бесконечным" в операторе цикла - вы просто перемещаете условие выхода из оператора цикла в тело цикла.Если это делает программу более читабельной, вы, конечно, можете это сделать.

0 голосов
/ 03 мая 2011

То, что вы описываете, будет работать нормально, но стоит упомянуть, что некоторые строгие стандарты кодирования (например, MISRA ) не одобряют использование return до конца функции.

Если ваш код соответствует таким стандартам, вы можете использовать цикл do-while с подходящим условием выхода:

do {
   // get userinput
   if (userinput != '0')
   {
       // do stuff 
   }
} while (userinput != '0');
0 голосов
/ 03 мая 2011

Вы также можете использовать цикл while с условием для многократного запроса пользователя на ввод.

while (condition) {
  ...
}

Вместо блока IF для проверки вы можете использовать.

0 голосов
/ 03 мая 2011

Для бесконечного цикла for (;;) - довольно распространенная практика.Но если у вас есть условие, такое как ненулевой пользовательский ввод, вы всегда можете выполнить эту проверку в цикле while.

...