Stemm33 Ответов: 3

Почему результат-onetwothree40 50 0, а не onetwothreethis-это конец...40 50 0 ?


#include <stdio.h>

int main()
{
    int i=10,j=20,k=0;
    
    if(i=40)
      
      printf("One");
    if(j=50)
      
      printf("Two");
    if(k=60)
      
      printf("Three");
    if(k=0)
      
      printf("This is the end...");
    printf("%d %d %d\n",i,j,k);
}


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

Почему результат-onetwothree40 50 0, а не onetwothreethis-это конец...40 50 0 ??

OriginalGriff

К сожалению, вы стали жертвой ошибки в системе,и ваш код не читается. Администраторы работают над проблемой, но это упрямый дьявол...
В принципе, весь ваш код после первого символа меньше, чем предполагалось, был HTML-тегом и удален, поэтому мы ничего не можем прочитать после "#include".
Пожалуйста, отредактируйте свой вопрос (используя виджет "улучшить вопрос") и вставьте его снова - на этот раз с помощью опций" кодировать "или" блок кода "во всплывающем окне "вставить" справа от экрана.

Suvendu Shekhar Giri

попробуйте обновить вопрос как sugested by @OriginalGriff

Stemm33

Думаю, что да

Suvendu Shekhar Giri

Да. Теперь все идеально.

Garth J Lancaster

во-первых, как вы сравниваете значения в 'c' и присваиваете значения переменным .. т. е. в чем разница между '=' и '= = ' и что, по вашему мнению, вы должны использовать

Stemm33

Я знаю, что в этом простом коде = измените значение моих переменных, но мой фактический вопрос заключается в том, почему три команды printf появляются в результате, а команда printf("это конец...") не появляется?почему программа переходит от последнего оператора if к последней команде printf?

3 Ответов

Рейтинг:
6

Patrice T

Цитата:
Почему результат-onetwothree40 50 0, а не onetwothreethis-это конец...40 50 0 ?
Потому что в C любое целое число равно true но значение 0, которое false.
Будьте осторожны, оценивая значение в if условие законное, оно часто нежелательно и является распространенной ошибкой новичков.

Вот ссылки на справочники книг по С и с++ авторов этих языков. Обратите внимание, что C является предком C++, поэтому знание C всегда полезно с C++.
Язык программирования Си - Википедия, свободная энциклопедия[^]
https://hassanolity.files.wordpress.com/2013/11/the_c_programming_language_2.pdf[^]
http://www.ime.usp.br/~ПФ/Керниган-Ритчи/с-Программирование-электронные книги.формат PDF[^]

Язык Программирования C++ [^]


Stemm33

Вы мне очень помогли.Спасибо!

Рейтинг:
23

Suvendu Shekhar Giri

Это потому что = является оператором присваивания.
Вам нужно использовать == для сравнения.
Попробуй-

int main()
{
    int i=10,j=20,k=0;
    
    if(i==40)
      
      printf("One");
    if(j==50)
      
      printf("Two");
    if(k==60)
      
      printf("Three");
    if(k==0)      
      printf("This is the end...");

    printf("%d %d %d\n",i,j,k);
}


Надеюсь, это поможет :)


Stemm33

Я согласен, что = - это оператор присваивания, но как три команды printf появляются в результате, а не команда printf ("это конец...")?

Suvendu Shekhar Giri

Просто заменить -

if(k=0)
 printf("This is the end...");

с
if(k=1)
  printf("This is the end...");


и увидеть изменения в результате.

Подсказка: 0=ложь

CPallini

5.

Stemm33

Я понял!Большое спасибо!

Рейтинг:
14

CPallini

Как было предложено Сувенду Шекхар Гири, вы используете оператор присваивания вместо теста на равенство. Теперь в C язык программирования, конструкция

i=40

является выражением, чья оценка является 40 Итак, написание

if (i=40)

заканчивается в
if (40)

То есть true состояние в if (любое число, но 0 предполагается, что true)

Вот почему вы получаете такой неожиданный результат.


Suvendu Shekhar Giri

Действительно, полезное объяснение. Это то, что ищет ОП.
Мои 5!

CPallini

Спасибо.

Stemm33

Теперь более понятно!Спасибо!

CPallini

Добро пожаловать.