Давайте рассмотрим операторы в C более детально.
Операторы – это специальные символы, которые выполняют определённые операции, такие как сложение или умножение чисел.
Наиболее часто используемые и важные операторы – операторы присваивания и сравнения.
Содержание
Присваивание
Рассмотрим такой пример:
#include <stdio.h> int main(int argc, char **argv) { char agestring[10]; int age; int bonus; printf("Enter your age : "); gets(agestring); age = atoi(agestring); if (age > 45) { bonus = 1000; } else { bonus = 500; } printf("Your age is %d, so your bonus is %d.\n", age, bonus); return(0); }
Оператор присваивания задаёт переменную слева равной значению справа:
... bonus = 1000 ...
При этом помните, что тип данных, который присваивается, должен быть того же типа, что и переменная.
Например такой код будет работать корректно:
... char a; int b; a = 'a'; b = 1; printf("A: %c, B: %d\n", a, b); ...
[simterm]
$ ./test
A: a, B: 1
[/simterm]
Если же вы попробуете присвоить неподходящий тип – сам компилятор выдаст вам предупреждение, а результат работы программы будет совсем не тем, что вы ожидаете:
... char a; int b; a = 'a'; b = "thisIsBe"; printf("A: %c, B: %d\n", a, b); ...
Собираем:
[simterm]
$ gcc test.c -o test test.c: In function ‘main’: test.c:10:7: warning: assignment makes integer from pointer without a cast [-Wint-conversion] b = "thisIsBe"; ^
[/simterm]
И результат:
[simterm]$ ./test
A: a, B: 4195764[/simterm]
Сравнение
Будьте внимательны, используя символы равенства: один сивол “=
” выполняет присваивание, тогда как два “==
” – являются оператором сравнения, используемые для проверки данных.
Давайте рассмотрим такой пример:
#include <stdio.h> #include <stdlib.h> int main(int argc, int **argv) { int num1, num2; num1 = atoi(argv[1]);; num2 = atoi(argv[2]);; if (num1 == num2) { printf("Args equal: %d, %d\n", num1, num2); } else { printf("Args differs: %d, %d\n", num1, num2); } return 0; }
Его выполнение:
[simterm]$ ./test 1 1
Args equal: 1, 1
$ ./test 1 2
Args differs: 1, 2[/simterm]
Мы присваиваем первый аргумент переменной num1
, а второй аргумент – num2
, после чего выполняем их сравнение:
... if (num1 == num2) ...
Если вы ошибётесь тут, и используете одинарный символ равенства вместо двойного – результат будет совершенно другим:
... num1 = atoi(argv[1]);; num2 = atoi(argv[2]);; if (num1 = num2) { printf("Args equal: %d, %d\n", num1, num2); } else { printf("Args differs: %d, %d\n", num1, num2); } ...
Теперь вместо выполнения сравнения – будет выполнено присваивание:
[simterm]$ ./test 1 2
Args equal: 2, 2[/simterm]
Таку ошибку совершить очень легко, поэтому будьте внимательны при выполнении таких операций.
Продолжение – часть 11 – if/else и проверка равенства.