Почему после точки при использовании функции printf() выводятся нули?

Как исправить программу на C, чтобы корректно выводился баланс пользователя, если даже в случае, когда баланс, например, равен 35.50, программа выводит только 35.00? В коде приведены массивы с \texttt{int} для идентификаторов и балансов клиентов, который не позволяет правильно обрабатывать десятичные значения.
  • 19 июля 2024 г. 12:12
Ответы на вопрос 2
При использовании функции `printf()` с спецификатором формата `%d`, программа выводит целочисленные значения. Числа с плавающей точкой должны выводиться с использованием спецификатора формата `%f`.

Чтобы исправить программу на C для вывода десятичных значений, следует изменить тип данных для массива балансов клиентов с `int` на `float` или `double`. Вот пример исправленного кода:

```c
#include <stdio.h>

int main() {
    int ids[] = {1, 2, 3};
    double balances[] = {35.50, 50.25, 75.80};

    for (int i = 0; i < 3; i++) {
        printf("Client %d balance: %.2f\n", ids[i], balances[i]);
    }

    return 0;
}
```

В этом коде используется спецификатор формата `%.2f`, который выводит десятичные значения с двумя знаками после запятой. Теперь программа корректно выводит балансы клиентов с учетом дробной части.
потому что int cusBal[10] . У вас массив целых чисел, вы его инициализируете константой 35.50 . При этом происходит приведение к типу int и часть после точки с запятой теряется. 

Вторая проблема, вы эту int переменную выводите через "%.2f". Так что вам еще очень повезло, что оно вывело вообще что-то похожее на нужное число.

Об обеих ошибках компилятор вам выдавал предупреждение (если он правильно настроен). Их все надо внимательно прочитать и убедиться, что они все безобидные, а лучше, чтобы их вообще не было.
Похожие вопросы