#c
Вопрос:
Кто — нибудь может объяснить, почему этот код выводит значения мусора?
int main(){ int a, b, sum; sum = a b; scanf("%d%d",amp;a,amp;b); printf("addition is %d", sum); return 0; }
Но если я напишу такой код, он выведет правильное значение?
int main(){ int a, b, sum; scanf("%d%d",amp;a,amp;b); sum = a b; printf("addition is %d", sum); return 0; }
Комментарии:
1. Если вы добавляете значения, прежде чем запрашивать их у пользователя (
scanf
), вы делаете кучу мусора. Если вы сначала запрашиваете у пользователя значения, а затем добавляете их, вы делаете это правильно и добавляете правильные значения.2. C-это не Excel!!
Ответ №1:
Это потому, что C-императивный язык, и каждая строка похожа на команду, выполняемую сверху вниз. Так что в данном случае:
int main(){ int a, b, sum; // create 3 variables: a, b and sum. Garbage on start sum = a b; // add 'a' and 'b' and save it in 'sum'. Still garbage scanf("%d%d",amp;a,amp;b); // read 2 numbers and save them in 'a' and 'b'. Nowe they're valid, but 'sum' is still garbage printf("addition is %d", sum); // print 'sum'. That's garbage return 0; }
Просто переупорядочивая операции (добавляя a
и b
после считывания их значений), мы получаем действительный результат
Ответ №2:
sum = a b;
это не определение или формула, это утверждение — оно выполняется, как только оно встречается, с любыми значениями в a
и b
(которые неопределенны).
С просто не такой уж высокий уровень.