2010-02-27 3 views
15

У меня этот код C.Результат отдела всегда равен нулю

#include <stdio.h> 

int main(void) 
{ 
     int n, d, i; 
     double t=0, k; 
     scanf("%d %d", &n, &d); 
     t = (1/100) * d; 
     k = n/3; 
     printf("%.2lf\t%.2lf\n", t, k); 
     return 0; 
} 

Я хочу знать, почему моя переменная 't' всегда равна нулю (в функции printf)?

+0

См. Также http://stackoverflow.com/questions/1580332/stdpow-gives-a-wrong-approximation-for-fractional-exponents/1580344 – GManNickG

+0

lol - целочисленное деление в c было моим самым первым головным скрестом. Тогда нет стека над потоком - просто юмористический профессор –

ответ

23

, потому что в этом выражении

t = (1/100) * d; 

1 и 100 являются целыми числами, целочисленное деление усекает, так что это То же самое, как это

t = (0) * d; 

вам нужно сделать, что константа с плавающей точкой, как этот

t = (1.0/100.0) * d; 

вы также можете сделать то же самое с этим

k = n/3.0; 
+9

Или просто используйте 'd/100.0'. – Joey

0

Вы используете целочисленное деление, а 1/100 всегда округляется до нуля в целых делениях.

Если вы хотите, чтобы сделать точку деления с плавающей и просто обрезает результат, вы можете убедиться, что вы используете плавающие литералов указателя вместо этого, и d будет неявно преобразован для вас:

t = (int)((1.0/100.0) * d); 
0

Я думаю, что его из-за

t = (1/100) * d; 

1/100 как целочисленное деление = 0

затем 0 * d alway s равно 0

если вы делаете 1,0/100,0 я думаю, что он будет работать правильно

-2
t = (1/100) * d; 

Это всегда равен 0, то вы можете сделать это

t=(1%100)*d 

и добавить его в 0

+0

Добро пожаловать в переполнение стека. Если вы решите ответить на более старый вопрос с хорошо установленными и правильными ответами, добавление нового ответа в конце дня может не дать вам никакого кредита. Если у вас есть какая-то отличительная новая информация или вы уверены, что другие ответы неверны, обязательно добавьте новый ответ, но «еще один ответ», дающий ту же основную информацию через шесть с половиной лет после того, как вопрос был задан, выиграл «Ты заслужил много кредитов. –

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

  • Нет связанных вопросов^_^