C Anfänger - Funktion



  • hm okay das war natürlich nicht mein plan aber wie muss ich das jetzt umschreiben, dass der die werte von scanf nimmt ?



  • [code]
    #include <stdio.h>
    #include <math.h>

    int main()
    {
    float h = 0, r = 0, x = 0;
    printf ("Bitte Radius eingeben: ");
    scanf ("%f\n", &r);

    printf ("Bitte Höhe eingeben: ");
    scanf ("%f\n", &h);

    printf("Ergebnis: %f", ((r*r)*h)*M_PI);
    return 0;
    }

    irgendwas stimmt noch ned weil irgendwie nach der ersten eingabe noch eine 2te Eingabe erwartet wird also nach dem Zeilenwechsel...
    btw
    cooles Forum



  • hiaswhans schrieb:

    irgendwas stimmt noch ned weil irgendwie nach der ersten eingabe noch eine 2te Eingabe erwartet wird also nach dem Zeilenwechsel...

    Die \n Dinger müssen aus scanf raus. -
    Den Rückgabewert von scanf sollte man prüfen, falls etwas float inkompatibles eingegeben wird:

    int main() 
    { 
    float h = 0, r = 0; 
    puts("********* KREISFLACHENBERECHNUNG ***********\n\n");
    printf ("Bitte Radius eingeben: ");
    if ( 1 != scanf ("%f", &r) )
    {
    	puts("INPUT ERROR");
    	return 1;
    }
    printf ("Bitte Hoehe eingeben: ");
    if ( 1 != scanf ("%f", &h)) 
    {
    	puts("INPUT ERROR");
    	return 1;
    }
    printf("Ergebnis: %f", ((r*r)*h)* mPI ); 
    return 0; 
    }
    


  • puts("********* KREISFLACHENBERECHNUNG ***********\n\n");
    

    Das würd ich mir nochmal überlegen. 🤡



  • hat das nen Grund wieso Du puts() und ned printf() hernimmst?
    Aha und und bei scanf() brauch ich keine \n? ... cool
    Und return 1 heißt den Schritt wiederholen bis scanf("%f", h) == 1?
    Und nun zum Kegelvolumen...



  • Kardath schrieb:

    Aha und und bei scanf() brauch ich keine \n? ... cool

    jajaja!

    Kardath schrieb:

    Und return 1 heißt den Schritt wiederholen bis scanf("%f", h) == 1?

    nonono!

    🙂



  • ^^ alles klar - hab ich bei IBM, Microsoft und bei der fhtw-berlin
    Ich gebe der if funktion also eine 1 also ein "Wahr" zurück oder verstehe ich das falsch.
    Wozu?



  • ⚠ Der Rückgabewert 1 wird oftmals verwendet, um einen Fehler zu signalisieren ⚠



  • ßsdgß09df0g0 schrieb:

    ⚠ Der Rückgabewert 1 wird oftmals verwendet, um einen Fehler zu signalisieren ⚠

    selten programmintern.



  • Bezog sich auf Funktionen eines Programms, hätte ich vllt. dazu schreiben sollen.
    Also programmintern.



  • hey is ja schön was mittlerweile hier diskutiert wird allerdings hilft mir das grad nicht weiter ^^

    wie gesagt bin totaler anfänger und hab noch nie funktionen benutzt und offensichtlich läuft etwas mit der funktion hier falsch, da er nicht die eingegebenen werte benutzt

    danke dann schonmal soweit hier das programm und bitte keine alternativprogramme die keine funktionen benutzen o.Ä. das programm soll im grunde so bleiben nur eben richtig funktionieren und ich denk mal das man auch nicht allzuviel ändern brauch

    #include "stdio.h"
    #include "math.h"
    
    /* Funktion zur Berechnung des Kegelvolumens */
    float kegelVolumen(float radius, float hoehe)
    {
    return (1/3)*(M_PI*radius*radius*hoehe);		// Semikolon vergessen
    }
    int main()
    {
    
    float radius,hoehe,v1,v2;
    
    printf ("Bitte einen Radius eingeben.\n");
    scanf  ("%f",&radius);
    printf ("Bitte eine Hoehe eingeben.\n");
    scanf  ("%f",&hoehe);
    
    /* Aufruf der Funktion kegelVolumen */
    
    v1 = kegelVolumen(2.7f, 3.1f);				// Einfacher Syntaxfehler anstelle eines Kommatas muss ein Punkt geschrieben werden
    v2 = kegelVolumen(3.4f, 2.4f);
    
    /* Ausgabe der Ergebnisse */
    printf("v1 = %f\n", v1 );    				// hier gehört ein float hin
    printf("v2 = %f\n", v2 );
    printf("v3 = %f\n", kegelVolumen(5.f, 2.5f));
    getchar();
    return 0;
    }
    


  • Warum sollte denn die Funktion nicht die eingegebenen Werte benutzen?
    Lass dir doch einfach die übergebenen Werte in der Funktion kegelVolumen mit
    printf anzeigen.
    Das Problem dürfte sein, das der Ausdruck (1/3) zu Null wird,
    weil das eine Integerdivision ist. Damit wird das gesamte Ergebnis zu 0.



  • was wär denn mit

    return (1.0/3.0)*(M_PI*radius*radius*hoehe);
    

    ?
    Damit wär doch das int Problem gelöst oder?

    Danke übrigens für die geschichte mit return 1.
    Ich steh bei manchen Dingen ein bisl auf der Leitung.



  • Damit wär doch das int Problem gelöst oder?

    Oder einfach mal hier nachlesen:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-253433.html

    Oder auch hier:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-253501.html



  • Oder einfach mal hier nachlesen:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-253433.html

    Oder auch hier:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-253501.html

    Check jetz ned was Du damit meinst... 😕



  • Big Brother schrieb:

    Warum sollte denn die Funktion nicht die eingegebenen Werte benutzen?
    Lass dir doch einfach die übergebenen Werte in der Funktion kegelVolumen mit
    printf anzeigen.
    Das Problem dürfte sein, das der Ausdruck (1/3) zu Null wird,
    weil das eine Integerdivision ist. Damit wird das gesamte Ergebnis zu 0.

    das frag ich euch ja ^^ jedenfalls spuckt er immer nur gleiche werte aus und ich hab keine ahnung wo er die hernimmt

    (1/3) war natürlcih mein fehler keine ahnung warum das da noch drin war mit (1.0/3) hat sich das natürlich erledigt



  • v1 = kegelVolumen(2.7f, 3.1f);
    

    weil da immer feste Werte stehen oder?

    ich fange auch grad am totalen Anfang an aber das macht doch das Gleiche oder ned?

    #include <stdio.h>
    #include <math.h>
    
    int main()
    {
    	float h = 0, r = 0, x = 0;
    	printf ("Bitte Radius eingeben: \n");
    	do {scanf ("%f", &r);} while ( getchar() != '\n' );
    
    	printf ("Bitte Höhe eingeben: \n");
    	do {scanf ("%f", &h);} while ( getchar() != '\n' );
    
    	printf("Ergebnis: %f", ((1.0/3.0)*(r*r)*h)*M_PI);
    	return 0;
    }
    


  • Versuche doch mal die Funktion wie folgt aufzurufen:

    v1 = kegelVolumen(radius, hoehe);
    

    Dann klappts auch. Dachte da kommst du selbst drauf 🙂

    Gruß,

    Andreas


Anmelden zum Antworten