2017-03-19 8 views
-1

Arbeiten an einer Zuweisung, bei der der Benutzer ein int und dann 1 eingeben, um das Quadrat, 2 für Cube und 3, um durch zwei zu teilen. Ich kann nicht herausfinden, warum meine Schrumpffunktion immer Null zurückgibt.C - Division gibt 0 zurück Null

#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

Sie drucken 'intValue' und' Results' die * * uninitialised Variablen sind. Nicht nur das, die Anweisungen sind nicht innerhalb einer Funktion, also wird nicht kompiliert. Bitte veröffentlichen Sie das [minimale, vollständige und überprüfbare Beispiel] (http://stackoverflow.com/help/mcve), das das Problem zeigt. –

+0

Re der Code jetzt gepostet: Ich bekomme 2 Fehler und 2 Warnungen vom Compiler. –

+0

Entschuldigung, ich habe Probleme, den ganzen Code zu veröffentlichen, es sagt, mein Beitrag hat zu viel Code. Lassen Sie mich es wieder aktualisieren – jschlita

Antwort

1

int intValue, menuSelect,Results;

So Results als int erklärt.

Wenn Sie es Ihrem Funktionsergebnis zuweisen, wird es gerundet/abgeschnitten (wahrscheinlich nicht das, was Sie wollen, sondern nur einen Teil des Problems).

Die Tatsache, dass 0.0 gedruckt wird, ist, weil Sie %lf Format in printf verwenden, die nicht int Datentyp entsprechen, und keine Konvertierung wird hier durchgeführt, da printf variable Argumente verwendet und vertraut den Anrufer (einig Compiler Ausgabe Warnungen).

Quickfix:

double Results; 

sollte genügen.

0

Zuerst hat Ihr Programm Fehler. Wie auch immer, um Ihre Frage zu beantworten, gibt Ihre Shrink() Funktion die Hälfte einer Zahl zurück; Das Problem ist, speichern Sie es in einer int Variable, die float Zahlen nicht nehmen kann. (Nur die Zahlen vor dem Dezimalpunkt werden übernommen). Sie haben zwei Möglichkeiten: Sie Results als float oder double oder drucken Sie direkt das Ergebnis Ihrer Funktion wie folgt erklären können:

printf("%lf", Shrink(intValue));