2017-02-21 5 views
-9
#include<stdio.h> 
int main() 
{ 
int i=1,n; 
printf("enter value of n"); 
scanf("%d",&n); 
for(i=1;i<=n;i++) 
{ 
    printf("%d",i); 
    if(i=5) 
    break; 
} 
} 

ПОЧЕМУ ВЫХОД МОЕЙ КОДА 1, КОТОРЫЙ НЕ ЗАВИСИТ ОТ ЗНАЧЕНИЯ N (ВХОД)?РАЗЛИЧИЕ BETWEN = AND == IN IF CONDITION

+6

ПОЧЕМУ ВЫ СМОТРЕТЬ !? ВЫ НАЖДАЛИСЬ, ЧТОБЫ ЗАКРЫТЬ КЛЮЧ К АВАРИИ? – StoryTeller

+1

ПОТОМУ ЧТО 'if (i = 5)' НАПРАВЛЯЕТ ЗНАЧЕНИЕ '5'' '', КОТОРЫЙ ОЦЕНИВАЕТСЯ ИСТИННЫМ, ПОТОМУ ЧТО ЭТИ НЕЗАВИСИМОСТЬ И ВОЗМОЖНОСТЬ НАХОДЯТСЯ ИЗ ЛОП. –

+1

СРАВНИТЕЛЬНЫЙ ОПЕРАТОР '==' СМОТРЕТЬ КАК ПАРУ ИЗОБРАЖЕНИЙ. НЕ УВЕРЕН, ПОЧЕМУ Я ДУМАЮ, ЧТО, ПРОСТО СЛУЧИЛСЯ ПЕРЕСЕЧАТЬ МОЕМУ РАЗУМ. –

ответ

3

Это всегда будет равно true, так как = фактически устанавливает значение, а не проверку на равенство. Используйте == для проверки равенства.

11

Оператор = задает значение lvalue (в вашем случае, i) в выражении с правой стороны и затем возвращает новое значение переменной. Это означает, что i=5 устанавливает i-5, а затем возвращает 5, что всегда верно как 5 != 0. Поэтому программа сразу же выдается после того, как будет напечатано первое число, которое равно 1.

Только в случае, если вы не слышали того, = ОПЕРАТОР ЗАДАЕТ валютацию Lvalue (в вашем случае, I) с экспрессией на правой стороне, а затем возвращает новое значение переменной. ДАННЫЕ СРЕДСТВА I=5 УСТАНОВКИ I-5, И ТОГДА ВОЗВРАЩАЕТСЯ 5, КОТОРЫЕ ВСЕГДА ИСТИНЫ КАК 5 != 0. ПОЭТОМУ ВЫ ПРОГРАММЫ НЕМЕДЛЕННО ВЫЙДЕТЕ ПОСЛЕ ПЕРВОГО ЧИСЛА, ПЕЧАТИ, КОТОРЫЙ 1.

+0

Может быть, его проблема в том, что C чувствителен к регистру? –

+0

Несмотря на то, что ОП кричал, ответ не нуждается в том, чтобы отозваться о плохой презентации OP. Предложите не кричать и удалять излишнюю заглавную часть. – chux

2

== будет проверять, совпадают ли оба значения. = будет выполнять задание. Следовательно, i=5 всегда будет истинным, и цикл будет break.

+2

Говори, я тебя не слышу. –