2016-04-04 7 views
0

У меня проблема с получением того же результата из математического уравнения, когда я использую функцию. Вот мой код.C конвертировать int, чтобы удвоить функцию

#include <stdio.h> 
int main() 
{ 
    int a=5, b=2; 
    double c; 
    c = (double) a/b; 
    printf("%f\n", c); 

    c = Divide(a); 
    printf("%f\n", c); 

    return 0; 
} 

int Divide(int value) 
{ 
    return value =(double) value/2; 
} 

Когда я запускаю код, который я получаю:

2.500000 
2.000000 

Я пытаюсь получить 2.50000 для обоих. Я попытался изменить функцию на

double Divide(double value) 

не повезло. Im новый для C и для кодирования вообще и Im застрял. Спасибо всем, кто может мне помочь.

+0

'return value = (double) value/2;' выполняет float-p oint, в результате получится '2.5', а затем присваивает значение обратно' int' с усечением, возвращая '2'. Удаление части 'value =' обеспечит предполагаемое поведение. – owacoder

+0

Благодарим вас за ответ. То, что вы написали, имеет смысл для меня. Я смог заставить эту функцию работать – jojonac

ответ

1

У вас есть две проблемы: первая связана с возвращаемым типом функций, а возврат int всегда будет усекать значение с плавающей запятой.

Вторая проблема заключается в том, что вы не возвращаете результат деления, вы возвращаете значение переменной value после присвоения ему, а так как value является целым числом, вы вернете усеченное значение. Верните ему следующее задание: return (double) value/2;

+0

Спасибо за ответ. Я смог заставить эту функцию работать так, как хотелось бы с вашей помощью. – jojonac

0

Ввести a следующим образом и изменить тип возврата.

#include <stdio.h> 
int main() { 
    int a=5, b=2; 
    double c; 
    c = ((double) a)/b; 
    printf("%f\n", c); 

    c = Divide(a); 
    printf("%f\n", c); 

    return 0; 
} 

double Divide(int value) { 
    return value = ((double)value)/2; 
} 
+2

Кастинг имеет более высокий [приоритет оператора] (http://en.cppreference.com/w/c/language/operator_precedence), чем разделение, поэтому дополнительные круглые скобки не имеют значения. –

1
int Divide(int value) 

изменение

double Divide(double value) 

, поскольку ваше значение имеет целочисленный тип, поэтому он присваивает целочисленное значение с плавающей точкой, которое будет 2,0

+0

Благодарим за отзыв. Кажется, в кодировании есть буквально миллионы способов скинуть кошку. Я смог заставить функцию работать так, как ожидалось, с вашим ответом и некоторыми другими. – jojonac

0

Вы можете сделать это:

#include <stdio.h> 

double divide(double value) { 
    return value = value/2.0; 
} 

int main() 
{ 
    double a=5.0, c; 
    int b=2; 

    c = (double) a/b; 
    printf("%f\n", c); 

    c = divide(a); 
    printf("%f\n", c); 

    return 0; 
} 
Смежные вопросы