Запятая в аргументах While Loop - PullRequest
0 голосов
/ 24 февраля 2019

Подготовка к выпускному экзамена по информатике.

Я действительно не могу понять этот вопрос.

Каким будет результат этой программы на C?

#include<stdio.h>
int main()
{
    int i = 0;
    while(i < 4, 5)
    {
        printf("Loop ");
        i++;
    }
    return 0;
}

A. Бесконечный цикл

B. Loop Loop Loop Loop Loop

C. Loop LoopЦикл Цикл

D. Ничего не печатается

После выполнения он печатает цикл в течение бесконечного времени.Почему это происходит?Почему в аргументах цикла While запятая?Что это делает?

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Это будет цикл навсегда, потому что условие цикла while i < 4, 5 оценивается как 5, что отличается от 0, поэтому считается true в C.

Чтобы узнать большеоб этом читайте о comma operator: https://en.wikipedia.org/wiki/Comma_operator

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

int val = (1, 2, 3);
printf("%d\n", val);

Напечатает 3.

0 голосов
/ 24 февраля 2019

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

В вашем случае он оценивает i < 4 условие и отбрасывает его, а затем оценивает условие до 5. Таким образом, оно по существу эквивалентно:

while(5)
{
    printf("Loop ");
    i++;
}

, что, очевидно, приводит к бесконечному циклу, поскольку условие всегда выполняется.(помните, что любое ненулевое значение всегда «истинно» в C).Также возможно целочисленное переполнение из-за увеличения i в бесконечном цикле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...