2009-09-25 70 views
0

我很困惑于模C中。我正在写一个小脚本,允许用户输入他们的两个数字变量,然后他们可以加,减,乘,除(容易)或模数(没有抓到这个一个呢)。我会在这做什么错误?我得到“无效的操作数到二进制%”的错误,这意味着我需要格式化为int,因为它是一个浮点数。然而,用以下方法做这件事的最好方法是什么?任何C帮助将不胜感激。如何用C中的模值将浮点数转换为Int?

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 2009-09-25 20:22:00

+0

@ geowa4 - 同班同学,不同的学生? – 2009-09-25 20:32:28

回答

0

Mod是一个整数运算,所以它不能用在浮点数上。你的情况应该是这样的:

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

它将两个浮动转换为整数,并执行国防部。但是,请注意,通过将浮点数转换为整数来损失精度,因此很可能结果可能不是您所期望的。

+0

如果我没有用这个方法得到正确的结果什么是理想的方法? – HollerTrain 2009-09-25 20:21:43

+0

你应该得到正确的结果。你会得到什么,而你期望什么? – 2009-09-25 20:24:18

+0

你认为“正确”的结果是什么? – 2009-09-25 20:27:43

2

我推荐使用标准C库的fmod函数。

0

变化

case '%': 
    result = number1 % number2; 

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

模分为整数。将每个操作数转换为整数。

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); 
}