2013-11-13 2 views
0

Поэтому у меня есть этот кодРаспечатка элемент массива

double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0}; 

printf("%d", balance[0]); 

Так что ожидать, что первый элемент массива, чтобы распечатать, который будет 1000,0. Тем не менее, он продолжает печатать 0 по какой-то нечетной причине. У кого-нибудь есть идея, почему?

+0

Я использовал формат% е спецификатор и он дает мне «0.00000» – user2930701

+0

try 'printf («% 0.1lf \ n », баланс [0]); вместо этого. Вот [ваш код] (http://ideone.com/JA7hPt) на ideone. Проблема находится где-то в другом месте – smac89

+0

Тот же выход, что и раньше – user2930701

ответ

4

Из проекта C11

§7.16.1.1/2

...if type is not compatible with the type of the actual next argument 
(as promoted according to the default argument promotions), the behavior 
is undefined, .... 

Вы должны использовать правильный спецификатор формата для печати значения переменных.

+0

+1, наконец, кто-то сказал правильную причину наблюдаемого поведения. – devnull

1

Вы используете спецификатор формата signed int для печати double.
Использование this-

printf("%f", balance[0]);

1

Для печати double используйте %f:

printf("%f", balance[0]); 

Вы можете запутаться, что d в %d означает двойной, но на самом деле это означает десятичной.

+0

Он печатает 0.00000 – user2930701

+0

@ user2930701 См. Http://ideone.com/lU2h8I и снова проверьте свой код. BTW, чтобы напечатать одну цифру после десятичной точки, например '1000.0', используйте'% .1f' –

1

для печати двойного значения, которое вы не можете использовать %d, вы должны использовать %f.

double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0}; 

printf("%f", balance[0]); 
0

Используйте% f вместо% d. Вы также можете заменить double float.

Поплавковый баланс [5] = {1000,0, 2,0, 3,4, 17,0, 50,0};

Е ("% F", баланс [0])

  1. % d используется для целого числа.
  2. % f используется для поплавка.
0

Вы использовали неправильный спецификатор формата в статусе printf в своем коде. Вы пытаетесь напечатать значение с плавающей запятой, используя спецификатор формата% d, что приводит к неожиданному результату.

Использование % е вместо % г и все будет в порядке, как это:

double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0}; 
printf("%f", balance[0]); 

Выход:

1000.000000 
Смежные вопросы