2013-06-02 4 views
-5

Почему это не работает, я очень новичок в программировании, но я не могу понять, почему это не работает правильно.(Экстремальный Noob здесь) Почему не работает этот код C?

#include <stdio.h> 
#include <math.h> 

int main(){ 
    int num1; 
    printf("Enter 1, 2, 3."); 
    scanf("%d", &num1); 
    if(num1 = 1) 
     printf("You entered one"); 
    else if(num1 = 2) 
     printf("You entered two"); 
    else if(num1 = 3) 
     printf("You entered three"); 
    else 
     printf("Invalid"); 
} 
+6

Если вы используете 'gcc' для компиляции, я бы рекомендовал включить флаги' -Wall' и '-Wextra', чтобы избежать подобных проблем в будущем. –

+4

Не будет работать ** как **? Всегда включайте * то, что вы ожидаете *, и * то, что вы видите вместо *, и * почему вы думаете, что это удивительно *. –

+1

'if (2 == x)', и вы не будете повторять ту же ошибку ... :) – effeffe

ответ

6

Заменить все = с == и вы должны быть хорошо (потому что = используется для присваивания, а == используется для проверки равенства, который, кажется, что вы хотите сделать)

+0

Я удивлен, что компилятор OP не предупреждает об этом. –

+0

@MartinJames OPs склонны использовать компиляторы без предупреждений :) – Elazar

+0

О, да, ничего себе не могу поверить, что я забыл об этом, спасибо. :) – user2446045

9

В C допустимо использовать назначение (int x = 5) в условном (если инструкция).

Например:

int x = 0; 

if (x = 5) 
{ 

} 

Это будет вычисляться так (она возвращает 5 к «если» и all non zero terms are true by convention), если назначение может быть сделано, и значения = 0. Что, в этом случае, это может быть сделано и возвращает 5.

Вы были, вероятно, искали это:

int x = 0; 

if (x == 5) 
{ 

} 

Это будет оценивать ложь (0).

Помните: для обозначения «присвоения» используется один знак равенства «=». Используйте двойной знак равенства «==», чтобы означать «сравнение».

+0

Использовать знак двойного равенства" == ", чтобы означать ** сравнение ** –

+0

Лучший способ выразить это. Обновлено :) – MrHappyAsthma

+0

Обратите внимание, что присваивание вернет 5, а не 1, которое по-прежнему оценивается как истинное относительно оператора if, но оно не является «истинным». – walkytalky

2

В C, как и в других многих языках программирования, оператор = означает «назначение». Когда вы делаете a = 3, это означает «назначить с 3», что, конечно же, это то, что преуспевает и возвращает true, поэтому ваша программа всегда будет входить в первую ветвь.

То, что вы должны сделать, это использовать «равенство тестирования» оператора, ==, так что == 3 возвращает истину, если и только если значение принадлежит переменной а равно 3.

0

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

Чтобы очистить о своих сомнениях относительно операторов прочитать эту ссылку http://www.tutorialspoint.com/cprogramming/c_operators.htm

0

И потому, что вы начали с ИНТОМ основными() только по причинам, компилятор поставили вернуть 0; в конце вашей программы, чтобы быть более правильным.

+2

Из C99 'return 0;' неявно, и если мы хотим быть правильными, сигнатура должна быть 'int main (void)'. – effeffe

0

Это не работает, потому что вам необходимо изменить знак = на номер ==. Вы иногда используете знак равенства, когда объявляете int или char. == имеет значение, равное, и вы хотите использовать его, когда вы не объявляете ints и chars. Если != означает не равный. Вы также должны указать return 0; в конце вашей программы.