& - это адрес оператора, который вы используете для функций, требующих указатель.
Подпись для scanf:
int scanf ( const char * format, ... );
Где ... означает, что требуются дополнительные аргументы и указатели,Почему указатели на scanf?Потому что аргументы - это аргументы, а не аргументы.В основном scanf должен знать тип и размер переменной.В противном случае, если, например, входные данные являются long long, но вы говорите, что это int, тогда не хватит места, зарезервированного для целочисленного результата.
Однако подпись для printf:
int printf ( const char * format, ... );
где ... означает дополнительные аргументы, содержащие «значение».Для printf вы передаете значение некоторого типа, это аргумент out.
Таким образом, вы передаете указатель в качестве дополнительного аргумента для scanf, но значение для printf.
Так что измените свой код следующим образом:
printf("the sum of two numbers is%d",c);
или
printf("the sum of two numbers is%d",a + b);
Значение, которое вы напечатали, было адресом переменной c.Это может быть любое положительное целое значение и зависит от того, где ваш компьютер решит сохранить переменную.