2 2 = 2 в C (двойная арифметика)

#c #double #sum

#c #двойной #сумма

Вопрос:

Я понятия не имею, почему он возвращает 2 значение a=2 и b=2 ..

Есть идеи?

 #include <stdlib.h>

int main()
{
    double a,b,c;
    printf("a=");
    scanf("%d", amp;a);
    printf("b=");
    scanf("%d", amp;b);
    printf("c=");
    scanf("%d", amp;c);

    printf("x=%d", a b);

    return 0;
}
  

Комментарии:

1. На ваш вопрос был дан ответ, но у вас также есть другая ошибка. Вы включаете stdlib.h , но printf и scanf не определены stdlib.h . Вам нужно stdio.h . Кстати, ваш компилятор действительно должен был выдавать предупреждения для всех этих проблем. Вы прочитали его вывод?

Ответ №1:

Спецификатор "%d" ожидает целое число, и вы передаете адрес a double . Использование неправильных спецификаторов в scanf приводит к неопределенному поведению.

Кроме того, использование неправильного спецификатора в printf — это то же самое. Потому printf что принимает переменное количество аргументов a b , которое является двойным, не может быть преобразовано в целое число.

Ответ №2:

%d для чтения целых чисел используйте %f or %lf для float / double .

Ответ №3:

printf должен использовать что-то вроде %f вместо %d . То же самое для scanf.

Ответ №4:

Если вы хотите принять ввод с плавающей запятой, используйте scanf printf ) с символом %lf форматирования, not %d (который предназначен для целых чисел).

Поведение вашей текущей программы не определено, поскольку вызовы scanf записывают целое число в переменную с плавающей запятой. Кроме того, вы пропускаете include <stdio.h> начало своей программы. Чтобы перехватить подобные ошибки, включите предупреждения в вашем компиляторе C:

 $ gcc so-scanf.c -Wall
so-scanf.c: In function ‘main’:
so-scanf.c:6:5: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
so-scanf.c:6:5: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
so-scanf.c:7:5: warning: implicit declaration of function ‘scanf’ [-Wimplicit-function-declaration]
so-scanf.c:7:5: warning: incompatible implicit declaration of built-in function ‘scanf’ [enabled by default]
so-scanf.c:7:5: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘double *’ [-Wformat]
so-scanf.c:9:5: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘double *’ [-Wformat]
so-scanf.c:11:5: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘double *’ [-Wformat]
so-scanf.c:13:5: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘double’ [-Wformat]
  

Комментарии:

1. Вам нужно %lf для удвоения с помощью scanf