Выход этой программы C - PullRequest
       4

Выход этой программы C

1 голос
/ 15 августа 2011

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

int main()
{
    int x=1,y=1,z;
    if (z=(y>0)) x=5;
    printf("%d %d",x,z);
    return 0;
}

Как и ожидалось, вывод равен X = 5, а Z = 1. Это потому, что когда вычисляется выражение y> 0, оно истинно итак далее и так далее.Теперь проблема в этой программе:

int main()
{
    int x,y;
    for (y=1;(x=y)<10;y++)
    ;

    printf("%d %d",x,y);
    return 0;
}

не должен ли вывод быть бесконечным циклом?Причина в том, что (x = y) всегда будет возвращать true (1), который всегда меньше 10?

Ответы [ 3 ]

7 голосов
/ 15 августа 2011

Нет, (x=y) возвращает новое значение после установки значения x для значения y.

Однако (x==y) возвращает 1, если они равны, и 0, если нет.

2 голосов
/ 15 августа 2011

Причина в том, что в какой-то момент у оценки по 10 присваивается х. Значение присвоения равно 10, поэтому не менее 10. Цикл завершается.

2 голосов
/ 15 августа 2011

x = y - это задание, вы путаете его с x == y.В действительности, x принимает значение y, а затем сравнивается с 10, пока условие < 10 не перестанет быть истинным.

И в вашем примере y == 1 (изначально) и x не инициализируется, поэтому x == y не обязательно будет истинным.

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