2017-03-19 20 views
-1

ユーザがintを入力し、1を入力して2乗、2を立方体、3を2で割る代入を処理します。私のシュリンク関数が常にゼロを返す理由を理解できません。C - Divisionはゼロを返します。

#include <stdio.h> 
// Function prototypes 
int Square(int value); 
int Cube(int value); 
double Shrink(int value); 

int main() 
{ 
    /* variable definition: */ 
    int intValue, menuSelect,Results; 
    intValue = 1; 
    // While a positive number 
    while (intValue > 0) 
    { 
     printf ("Enter a positive Integer\n: "); 
     scanf("%d", &intValue); 
     if (intValue > 0) 
     { 
      printf ("Enter 1 to calculate Square, 2 to Calculate Cube, 3 to divide  integer in half \n: "); 
      scanf("%d", &menuSelect); 

      if (menuSelect == 3) 
      { 
       // Call the shrink function 

       Results = Shrink(intValue); 
       printf("Half of %d is %lf\n",intValue,Results); 
      } 
      else 
       printf("Invalid menu item, only 1,2 or 3 is accepted\n"); 
     } 
    } 
    return 0; 
} 

/* function returning half of a number */ 
double Shrink(int value) 
{ 
    return (double) value/2.0; 
} 
+0

あなたは印刷 '*未初期化変数でありintValue'と' Results' *。それだけでなく、ステートメントは関数内にないので、コンパイルされません。問題を示す[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)を投稿してください。 –

+0

コードが今投稿されました:私はコンパイラから2つのエラーと2つの警告を受け取ります。 –

+0

申し訳ありませんが、すべてのコードを投稿する際に問題が発生しています。私の投稿にはコードが多すぎます。 – jschlita

答えて

1

int intValue, menuSelect,Results;

のでResultsintとして宣言されています。

関数の結果に割り当てると、丸められたり切り捨てられたりします(必要なものではなく、問題の一部のみ)。

あなたはintデータ型と一致しない、printf%lf形式を使用している、とprintfは、発信者を変数引数を使用し、信頼以来、何の変換は、ここでは実行されませんので0.0が印刷されているという事実がある(いくつかのコンパイラの問題しかし警告)。

クイックフィックス:

double Results; 

十分なはずです。

0

まず、プログラムにエラーがあります。 とにかく、あなたの質問に答えるには、あなたのShrink()関数は数値の半分を返します。問題は、int変数に保存することです。この変数には、floatの数字を使用できません。 (小数点以下の数字のみが使用されます)。 次の2つのオプションがあります:あなたは、次のように直接floatまたはdouble、またはプリントなど、あなたの関数の結果をResultsを宣言することができます。

printf("%lf", Shrink(intValue)); 
関連する問題