yexxx786 Ответов: 2

Не в состоянии понять вывод


main()
{
int k=25;
printf("\n %d %d %d",k==25,k=50,k>10);
return 0;
}


мой вопрос в том, почему выход 0 50 и 1
у меня есть проблема с 0 так как выход должен быть 1 так как значение k было определено как 25
пожалуйста помогите

Что я уже пробовал:

и это мой первый вопрос здесь, так что плез игнорирует мои ошибки в вопросе ... хотя будущие направления вежливо приветствуются :)

CPallini

Взгляните также на:
https://en.wikipedia.org/wiki/Sequence_point

2 Ответов

Рейтинг:
2

Dave Kreskowiak

Первый аргумент, k= = 25, является выражением сравнения. Результат будет либо истинным (1), либо ложным (0). Итак, первое число, которое вы получили, было ложным (0).

Второй аргумент, k=50, является выражением присваивания. Вы устанавливаете значение k равным 50. Второе число просто говорит, что значение k равно 50.

Последний аргумент - это еще одно выражение сравнения. Поскольку k равно 50, а 50 больше 10, вы получаете true (1).


Это попахивает домашним заданием. Я, конечно, надеюсь, что вы получите эти концепции, потому что вы находитесь в серьезной опасности провалить класс без них.


Patrice T

Привет Дэйв,
Я думаю, что ОП уже знает эти понятия.
Он просит объяснений по поводу k= = 25 быть ложным, что довольно удивительно, когда читаешь код.
Смотрите мое решение.

Dave Kreskowiak

Упс! Моя вина. Я неправильно понял вопрос.

Рейтинг:
12

Patrice T

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

int k=25;
printf("\n %d %d %d",k==25,k=50,k>10);

можно перевести на (я переписал код с 1 операцией на строку, чтобы проиллюстрировать работу компилятора)
int k=25;
printf("\n %d",k==25); // 1
k=50;
printf(" %d",k); // 50
printf(" %d",k>10); // 1

или в вашем случае
int k=25;
k=50;
printf("\n %d",k==25); // 0
printf(" %d",k); // 50
printf(" %d",k>10); // 1

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


Richard MacCutchan

Обычно это происходит потому, что аргументы помещаются в стек в обратном порядке. Таким образом, мы получаем следующие выражения::

k>10 ...  1
k=50 ... 50, and k now has the value 50
k==25 ... 0

Patrice T

Я это знаю.
Просто хотел подтолкнуть легкую для понимания картинку.

CPallini

Я не совсем понимаю, почему кто-то проголосовал за двоих. У меня 5.

Patrice T

Я тоже.
Спасибо.

nv3

Моей 5. Хорошее объяснение.

Patrice T

Спасибо.