Задать вопрос
@VHLAM

Почему printf() выводит нули после точки?

Начал изучать C по книге Грега Перри и Дина Миллера "Программирование на C для начинающих. 3-е издание".
Я конечно был предупреждён об обилии ошибок и опечаток в данной книге, но до определённого момента, по мере прочтения книги, удавалось исправлять их самостоятельно.
Понять, в чем же проблема в следующем фрагменте я не смог.

В конце при выводе баланса пользователя, даже там, где баланс например 35.50, программа выводит 35.00.

#include <stdlib.h>
#include <stdio.h>

main()
{
int cusID[10] = {1, 2, 6, 3, 37, 7, 38, 63, 46, 9};
int cusBal[10] = {0.00, 10.00, 400.00, 25.00, 39.80, 262.44, 39.02, 1.34, 73.42, 1.61};
int idSearch;
int ctr;
int i;
int found;
int inn, out, swap;
int tempID;
float tempBal;

//ДО СОРТИРОВКИ
puts("До сортировки:");
for(i = 0; i < 10; i++)
{
printf(" %d\n", cusID[i]);
}

//СОРТИРОВКА
for(out = 0; out < 10; out++)
{
    for(inn = out; inn < 10; inn++)
    {
        if (cusID[inn] < cusID[out])
        {
            tempID = cusID[inn];
            cusID[inn] = cusID[out];
            cusID[out] = tempID;
            
            tempBal = cusBal[inn];
            cusBal[inn] = cusBal[out];
            cusBal[out] = tempBal;
        }
    }
}


//ПОСЛЕ СОРТИРОВКИ
puts("\nПосле:");
for(i = 0; i < 10; i++)
{
printf(" %d\n", cusID[i]);
}

printf("\nВведи айди:\n");
scanf(" %d", &idSearch);

//ПОИСК
found = 0;
for(ctr = 0; ctr < 10; ctr++)
{
    if(idSearch == cusID[ctr])
    {
        found = 1;
        break;
    }
   if(cusID[ctr] > idSearch)
    {
        break;
    } 
}
if(found)
{
    if(cusBal[ctr] > 100.00)
    {
        printf("Баланс велик $%.2f. Плохо\n", cusBal[ctr]);
    }
    else
    {
        printf ("Баланс мал $%.2f. Хорошо", cusBal[ctr]);
    }
}
else
{
    printf("Нетy ID %d", idSearch);
}
return(0);
}
  • Вопрос задан
  • 195 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
потому что int cusBal[10]. У вас массив целых чисел, вы его инициализируете константой 35.50. При этом происходит приведение к типу int и часть после точки с запятой теряется.

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

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

Войдите, чтобы написать ответ

Похожие вопросы