#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