2009-09-25 2 views
0

Я так запутался с модулем в C. Я пишу небольшой скрипт, который позволяет пользователю вводить свои два числовых вара, тогда они могут либо добавлять, вычитать, умножать, делить (просто) или модуль (не поймали это один еще). Что я буду делать неправильно в этом? Я получаю ошибку «недопустимые операнды к двоичным%», что означает, что мне нужно отформатировать ее до int, так как это float. Однако каков наилучший способ сделать это со следующим? Любая помощь C будет с благодарностью.Как преобразовать Float в Int с модулем в C?

int main (void) 
{ 
    float number1, number2, result; 
    char symbol; 

    //allow user interaction 
    printf("Enter your formula: \n"); 
    scanf("%f %c %f", &number1, &symbol, &number2); 



    switch (symbol) { 
     case '%': 
      result = number1 % number2; 
      printf("Result: %f \n", result); 
      break; 
     default: 
      printf("Operation Error. Program aborted. \n \n"); 
      break; 
    } 

    printf("Press any key to continue \n"); 

    getchar(); 
    return 0; 
} 

Где и как это сделать?

+1

это выглядит ужасно знакомым: http://stackoverflow.com/questions/1478588/c-calculator-question – geowa4

+0

@ geowa4 - Тот же класс, другой студент? –

ответ

0

Mod - целочисленная операция, поэтому ее нельзя использовать для поплавков. Ваш случай должен прочитать что-то вроде:

result = (int)number1 % (int)number2; 

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

+0

, если я не получаю правильный результат с помощью этого метода, каким будет идеальный метод? – HollerTrain

+0

Вы должны получить правильный результат. Что вы получаете, и чего вы ожидаете? –

+0

Что вы считаете «правильным» результатом? –

2

Я рекомендую использовать функцию стандартной библиотеки C fmod.

0

изменение

case '%': 
    result = number1 % number2; 

в

case '%': 
    result = (int)number1 % (int)number2; 

?

modulo деление для целых чисел. Передайте каждый операнд целому числу.

3

Вы можете использовать заявление, как:

result = (int)number1 % (int)number2; 

бросить свои поплавки Интс и выполнить операцию по модулю, но вы потеряете десятичную точность.

Вы также мог бы включать math.h и использование FMOD

result = fmod(number1, number2); 
1

Оператор % работает только на целочисленных типах. Для выполнения той же задачи с плавающей точкой, вы хотите сделать что-то вроде:

#include <math.h> 
float modulus(float a, float b) 
{ 
    return a - b * floor(a/b); 
} 
Смежные вопросы