2015-08-13 3 views
0
// 6.1 Brain Teaser 

#include <stdio.h> 

int pills,weight; 
float bottlenumber; 

void load() 
{ 
    printf("Enter the number of pills: "); 
    scanf("%d", &pills); 
    printf("Enter the weight of your pills: "); 
    scanf("%d", &weight); 
} 

void calc() 
{ 
    bottlenumber = (weight - 210)/(float)0.1; 
} 

void print() 
{ 
    printf("The bottle number is %.f!", bottlenumber); 
} 

void main() 
{ 
    load(); 
    calc(); 
    print(); 
} 

Пользователь должен ввести 211.3. Тогда ответ должен быть 13, но вместо этого я получаю 10. Я думаю, что это связано с аспектом плавания и частью вычисления.Неисправность с функциями C, в частности в расчете

+0

есть только два предпочтительных и один необязательный формат для объявления функции main(). 1) int main (void) 2) int main (int argc, char * argv []) и необязательно 3) int main() Обратите внимание, что все допустимые формы объявления основной функции имеют тип возврата 'int' Suggest, всегда включающий все предупреждения при компиляции (для gcc, при минимальном использовании: «-Wall -Wextra -pedantic»). Тогда компилятор рассказал бы вам об этой проблеме. – user3629249

ответ

1

weight является int, не float, и вы читаете это в качестве int, так что если пользователь вводит 211,3 затем weight содержит 211.

Если вы ожидаете weight быть поплавок, то вам должен объявить его как таковой и прочитать его как таковой.

float weight; 

... 

printf("Enter the weight of your pills: "); 
scanf("%f", &weight); 
+0

Ах! Большое спасибо. Это проблема мозгового тизера в Cracking the Coding Interview, которую я взял, чтобы написать программу для нее (в частности, 6.1). –

0

эта линия проблема:

bottlenumber = (weight - 210)/(float)0.1; 

помните, введенное значение веса 3.

так 3 - 210 = -207

следующий разрыв -207 по 0,1, который = -2070

Я подозреваю, что строка должна быть написана несколько иначе

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