[C] Relativ einfache Aufgabe

cygnus

back to the roots
ID: 55152
L
2 Mai 2006
1.779
225
Durch die Eingabe eines Durchmessers, soll das Programm das Volumen und die Oberfläche einer Kugel ausrechnen.

V = 4/3 * Pi * r³
O = 4 * Pi * r²

Ich hab meinem Kollegen soweit wie möglich geholfen, und das kam raus.
Nur wirklich funktionieren tut es nicht.
Anregungen?



PHP:
#include <stdio.h>

int main(void)

{
   float  durchmesser;                                 
   float x=4,y=3;                          
   const  float PI=3.141592;
   float r;                                                     
   float rV;                                                    
   float volumen;                                               
   float tempV=x/y;                      

   printf("Bitte geben Sie den Durchmesser ein: ");    
   scanf("%f",&durchmesser);                                    
   r=durchmesser/2;                                             
   rV=r*r*r;                                                    
   volumen=(tempV*PI*rV);                                       
   printf("Volumen der Kugel: %f\n", volumen);                  

   
   float O;                                                     
   float rO;                                                    
   rO=r*r;                                                           
   O=x*PI*rO;                                                      
   printf("Oberflaeche der Kugel: %f\n", O);                    
        getchar();
        return 0;
}
 
Was genau funktioniert denn nicht? Wenn ich den Code bei mir laufen lasse, dann kann man den Durchmesser eingeben und es erfolgt die Ausgabe des Volumens und der Oberfläche. Genau das soll doch passieren, wenn ich das richtig sehe...

Ich nehme aber an, dass das Fenster sofort wieder schließt, bevor du die Ausgabe sehen kannst? Ich weiß nicht, ob man in C system("pause"); verwenden kann, aber notfalls kannst du vor dem return ja noch eine Eingabe einbauen, bevor das Fenster dann geschlossen wird.

Eventuell gibts da auch noch eine andere bessere Möglichkeit etwas gegen das sofortige Schließen zu machen, aber da fällt mir spontan nichts ein. Das wird dann bestimmt jemand nach mir erwähnen, der da mehr Ahnung von hat ;).
 
  • kein Fehler, aber der Übersicht halber:
    Nicht für jeden Ausdruck ne Variable anpatzen. Schreib ruhig wie in deiner Formel
    PHP:
    float v = 4/3 * r*r*r * PI;
  • const is in reinem ANSI-C afaik nicht erlaubt
  • Auch nicht zulässig sind Variablen-Deklaration nach der ersten Zeile ausführbarem Code, d.h. alle Variablen oben deklarieren
Sonst wäre vielleicht ne Beschreibung von "wirklich funktionieren tut es nicht" nicht schlecht ;)

edit @dabu:
getchar() wartet auf Tastendruck, d.h. das erfüllt denselben Zweck.
 
Ich weiß nicht, ob man in C system("pause"); verwenden kann, aber notfalls kannst du vor dem return ja noch eine Eingabe einbauen, bevor das Fenster dann geschlossen wird.
Wäre die eine Methode. Wenn man unter Windows arbeitet, dann kann man das kleine Programm aber auch einfach über die Eingabeaufforderung (cmd.exe / command.com) öffnen, denn die bleibt immer offen ;)
 
PHP:
float v = 4/3 * r*r*r * PI;
Ähhm, 4 und 3 sind dann doch integer, oder? ;) Meaning: 4 / 3 == 1.

edit @dabu:
getchar() wartet auf Tastendruck, d.h. das erfüllt denselben Zweck.
So, wie ich das in Erinnerung habe, hat getchar() bei mir immer noch das "Enter" aus der vorangegangenen Eingabe erwischt und daher nie richtig funktioniert.

Ich hab meinem Kollegen soweit wie möglich geholfen, und das kam raus.
Nur wirklich funktionieren tut es nicht.
Anregungen?
Wie theHacker schon sagte, die Variablen-Deklarationen gehören ganz an den Anfang. Wenn du die Formeln schon vorgegeben hast, solltest du als Variablennamen IMO auch die Formelzeichen nutzen und die Formeln möglichst 1:1 abtippen. Das "const" ist laut meinem C-Buch sehr wohl im ANSI enthalten. Das getchar() ist doppelt, um das "Enter" aus der vorangegengenen Eingabe abzufangen. Und einige Kommentare können auch nicht schaden.
PHP:
#include <stdio.h>
 
int main(void)
{
   const float PI = 3.141592f;

   float d; /* Durchmesser der Kugel */
   float r; /* Radius der Kugel */
   float V; /* Volumen der Kugel */
   float O; /* Oberflaeche der Kugel */
 
   /* Durchmesser der Kugel abfragen und daraus den Radius bestimmen. */
   printf( "Bitte geben Sie den Durchmesser ein: " );
   scanf( "%f", &d );
   r = d / 2;
 
   /* Volumen der Kugel berechnen und ausgeben. */
   V = (4.0f / 3.0f) * PI * ( r * r * r );
   printf( "Volumen der Kugel: %f\n", V );
 
   /* Oberflaeche der Kugel berechnen und ausgeben. */
   O = 4.0f * PI * ( r * r * r );
   printf( "Oberflaeche der Kugel: %f\n", O );
 
   getchar(); /* [Enter] der vorangegangenen Eingabe abfangen !? */
   getchar(); /* Warten... */
 
   return 0; /* There and back again, a hobbits tale... */
}

MfG
Sven
 
Danke für die Anregungen!
Sorry das ich "funzt net richtig" nicht wirklich exakt beschrieben habe ;)

Am getchar() hats gelegen; danke euch :)
 
Ich bin ja nun kein Windows-Programmier-Frosch, aber unter Linux kommst Du mit einem einzigen getchar() aus, wenn Du das Terminal in den Nicht-Kanonischen Modus versetzt und einstellst, daß ein read() bereits nach einem einzigen Zeichen als erfüllt angesehen werden kann. Dazu müssen die Einstellungen des Terminals mit tcgetattr() ausgelesen, angepaßt und mit tcsetattr() wieder gesetzt werden.

Wenn es Euch interessiert kann ich den Code-Schnipsel hier mal posten.