2009-09-25 71 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); 
}