Давайте рассмотрим операторы в 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 и проверка равенства.

2 185 views