Кто — нибудь может объяснить, почему этот код выводит значения мусора?

#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 (которые неопределенны).

С просто не такой уж высокий уровень.