Несколько условий в течение l oop для одного l oop в Cpp - PullRequest
1 голос
/ 24 апреля 2020

Я прошел через этот фрагмент кода, когда обновлял C ++ MCQ. Ранее я использовал только && или || для объединения нескольких условий, но этот код использует ',':

using namespace std; 
int main() 
{ 
   int i; 
   for (i = 0; i < 0, 5; i++) 
       printf("%d ", i); 
   return 0; 
} 

Формально ответом на этот вопрос является бесконечный l oop. Просьба кто-нибудь предложить работу этого фрагмента, как условия получить оценку

Ответы [ 2 ]

2 голосов
/ 24 апреля 2020

У вас есть оператор запятой в состоянии вашего для l oop. Оператор запятой вычисляет свой первый операнд и отбрасывает результат, а затем оценивает второй операнд и возвращает это значение (и тип). Оператор запятой также имеет наименьший приоритет среди всех операторов C / C ++, что означает, что он всегда является последним для привязки к выражению.

Таким образом, условие в вашем для l oop эквивалентно:

(i < 0), 5

Результатом этого выражения всегда будет 5, что не равно 0 (false). Следовательно, условие всегда истинно.

Если вы оставите l oop включенным достаточно долго, в итоге i, являющееся целым числом со знаком, переполнится. Это приводит к неопределенному поведению (спасибо @ Jarod42).

0 голосов
/ 24 апреля 2020

В функции 'int main ()': 10:16: предупреждение: левый операнд оператора запятой не действует [-Wunused-value]

запустите ваш код здесь и прочитайте предупреждения

...