2016-09-22 25 views
-1

ちょっと私はCプログラミングの使い方を学ぶのが初めてで、電卓の分割部分に問題があります。私は浮動小数点を2桁持っている必要があります。私は%dの代わりに%fを使う必要があると思いますが、変数を変更するとブレークします。ファンはフロートの答えです。浮動小数点除算の計算

ここにコード全体があります。部門はケース4です。

#include <stdio.h> 
#include <math.h> 

int menu(void); 

int main(void){ 
    int selection, num1, num2, ans; 
    float fans; 
    selection = menu(); 
    while (selection !=8) { 
    switch (selection) { 
     case 1: printf("Enter 1st number: "); 
      scanf("%d", &num1); 
      printf("Enter 2nd number: "); 
       scanf("%d", &num2); 
       ans = num1 + num2; 
       printf("%d + %d = %d\n", num1, num2, ans); 
break; 
     case 2: printf("Enter 1st number: "); 
       scanf("%d", &num1); 
       printf("Enter 2nd number: "); 
       scanf("%d", &num2); 
       ans = num1 - num2; 
       printf("%d - %d = %d\n", num1, num2, ans); 
break; 
     case 3: printf("Enter 1st number: "); 
       scanf("%d", &num1); 
       printf("Enter 2nd number: "); 
       scanf("%d", &num2); 
       ans = num1 * num2; 
       printf("%d * %d = %d\n", num1, num2, ans); 
break; 
    case 4: printf("Enter 1st number: "); 
       scanf("%d", &num1); 
       printf("Enter 2nd number: "); 
       scanf("%d", &num2); 
      if(num2 != 0) { 
      fans=(float)num1/num2; 
       printf("%d/%d = %d\n", num1, num2, ans); 
      } 
      else { 
       printf("Error. Cannot divide by 0!\n"); 
      } 
break; 
    case 5: printf("Enter number: "); 
       scanf("%d", &num1); 
       ans=abs(num1); 
       printf("|%d| = %d\n", num1, ans); 
break; 
    case 6: printf("Enter number: "); 
       scanf("%d", &num1); 
      if(num1<0) { 
       printf("Error. Cannot be a negative number.\n"); 
      } 
     else { 
       fans=sqrt(num1); 
       printf("Sqrt(%d)=%d\n", num1, ans); 
      } 
break; 
    case 7: printf("Enter base number: "); 
       scanf("%d", &num1); 
       printf("Enter exponent: "); 
       scanf("%d", &num2); 
      if((num1==0)&&(num2<=0)){ 
       printf("Error. Power cannot be represented.\n"); 
      } 
      else { 
       fans=pow(num1,num2); 
       printf("%d^%d=%d\n", num1, num2, ans); 
      } 
break; 
     default:printf("%d is not a valid selection\n", selection); 
     } 
    selection=menu(); 
    } 
    printf("Bye!\n"); 
    } 

int menu(void) { 
    int choice; 
    printf("1 Add\n"); 
    printf("2 Subtract\n"); 
    printf("3 Multiply\n"); 
    printf("4 Divide\n"); 
    printf("5 Absolute Value\n"); 
    printf("6 Square Root\n"); 
    printf("7 Powers\n"); 
    printf("8 Quit\n"); 
    scanf("%d", &choice); 
return choice; 
} 
+0

恐らく 'fans =(float)num1/num2;printf( "%d /%d =%d \ n"、num1、num2、ans); ' - >' fans =(float)num1/num2;printf( "%d /%d =%.2f \ n"、num1、num2、fans); '? – chux

+1

整数入力のみを受け入れる電卓はかなり役に立たない。 2.5を5で割ったければどうなりますか? –

答えて

1

非常に近いです。浮動小数点型の答えで、前の行で計算したが、タイプミスまたは使用しなかったことを知っているので、fansを使用することになっていました。

あなたなら右の使用%f

printf("%d/%d = %f\n", num1, num2, fans); 

注:%.2fも2桁の精度のために動作します。 %fは機能しますが、小数点以下6桁を出力します。 printf()のPOSIX仕様を参照してください。

f-double - 精度が指定されていない場合、デフォルトの精度6でfloatが出力されます。小文字

ところで、いい電卓プログラム:)