Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14
  1. #1
    Fortgeschrittener
    Registriert seit
    19.02.2008
    Beiträge
    35

    Standard [C] Wertübergabe ohne Globale Variable

    Hallo erst mal,
    Ich hab mal mit C angefangen Programmieren zu lernen, und mal zu Übungszwecken so nen Schwachsinn wie nen BMI-Rechner programmiert.
    Was ich dabei reinbringen wollt war ne Funktion auserhalb der main()-Funktion, die zur Berechnung des BMI's zuständig ist.
    Diese Funktion sollte dann den ausgerechneten Wert an die main()-Funktion zurückgeben, und diese den Wert dann ausgeben. Was das Programm aber permanent nicht wollte, ist den Wert zurückzugeben oder gar auszurechnen.


    Code:
    #include <stdio.h>
    
    void rechnung(ge,gr){
          float BMI;
          BMI = ge/gr/gr;
          return BMI;
          }
    
    
    int main(void){
        int gewicht;
        float groesse;
        float BMI;
        
        printf("Bitte Gewicht in KG angeben:");
        scanf("%d",&gewicht);
        printf("Bitte Groesse in Meter angeben:");
        scanf("%f",&groesse);
        
        BMI = rechnung(gewicht,groesse);
    
        printf("%.2f",BMI);
        
        fflush(stdin);
        getchar();
        return 0;
    }
    Hier das Listing.
    Hab keine Ahnung mehr ob alles noch stimmt, aber das grundgerüst des Programms sollte es wiederspiegeln, hab einfach schon lange rumprobiert =)
    Naja die einzige frage die ich jetzt hab ist:"Kann ich den wert zurückgeben ohne ihn an ein Globale Variabel zu übergeben?"

    if(Antwort = ja){
    printf("PLEASE HELP");
    }
    else{
    printf("OK! Problem gelöst");
    }

    hehe^^ also haut rein...
    Mfg DevilC

  2. #2
    Bad Times Virus
    Registriert seit
    04.03.2008
    Beiträge
    506

    Standard

    eine frage... wieso hast bei gewicht int verwendet?

  3. #3
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard Re: [C] Wertübergabe ohne Globale Variable

    Zitat Zitat von DevilC
    Code:
    void rechnung(ge,gr){
          float BMI;
          BMI = ge/gr/gr;
          return BMI;
          }
    Es würde mich sehr wundern wenn dein Compiler das so, ohne zu protestieren, hinnimmt!
    Eine Funktion mit "Rückgabetyp void" sollte normalerweise nichts zurückgeben (möglich wären "return (void) 0;" oder "return;").

    Was du meinst wäre "float rechnung(ge,gr)", da ein float (in diesem Fall der Inhalt der Variablen "BMI") zurückggeben werden soll.

    PS: die Funktion "rechnung" sieht meines Erachtens grauenhaft aus!


    mfG. BlackBerry

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  4. #4
    Fortgeschrittener
    Registriert seit
    19.02.2008
    Beiträge
    35

    Standard

    Ich weis, da stand vorher auch float^^
    nur das hab ich während des rumprobierens geändert, um zu gugen was passiert.
    Und ja die Funktion sieht grauenhaft aus^^ das float BMI; sollte weg sollte auch ohne gehen, und und und^^
    soll ja nur mal das Grundgerüst wiederspiegeln.
    Und Gewicht ist als int deklariert, da es mir eig recht egal ist ob du 50 oder 50,5 da eingibst, könnt man vielleicht auch als float machen falls jemand echt auf die idee kommen sollte da n Kommawert einzugeben^^

    EDIT:
    Ok hab den Fehler gefunden, auch wenn's ein Kiddyfehler war, der mich fast zur verzweiflung gebracht hat :>

    Code:
    #include <stdio.h>
    
    float rechnung(float ge,float gr){  // float vergessen
          float ergebniss = ge/gr/gr;  //float vergessen
          return ergebniss;
          }
    
    
    int main(void){
        int gewicht;
        float groesse;
        float BMI;
        
        printf("Bitte Gewicht in KG angeben:");
        scanf("%d",&gewicht);
        printf("Bitte Groesse in Meter angeben:");
        scanf("%f",&groesse);
        
        BMI = rechnung(gewicht,groesse);
    
        printf("%.2f",BMI);
        
        fflush(stdin);
        getchar();
        return 0;
    }
    also ein BIG THX trotzdem an alle =)

    Edit2: @ eRaSeR!
    Guck hab dir zu liebe sogar das int in float geändert jetzt kannste dein gewicht sogar in Gramm angeben
    Mfg DevilC

  5. #5
    CIH-Virus Avatar von -[RiDER]-
    Registriert seit
    05.01.2007
    Beiträge
    496

    Standard

    Hi

    Die Funktion rechnung() könnteste auf
    Code:
    float rechnung(float ge,float gr)
    {
          return ge/gr/gr;
    }
    beschränken.
    Immerhin eine Variable gespart (die vom Compiler sicherlich eh wegoptimiert wird).

    Zitat Zitat von DevilC
    Guck hab dir zu liebe sogar das int in float geändert
    Nein, hast Du nicht.
    Ich lese da immer noch
    Code:
    [...]
        int gewicht;
    [...]
        printf("Bitte Gewicht in KG angeben:");
        scanf("%d",&gewicht);
    //         ^^
    [...]
    Und wenns irgendwie geht, ist scanf() zu vermeiden!
    Schonmal irgendwas anderes als ne Zahl eingegeben?
    Murks kommt dabei raus. Und der lässt sich nicht mal überprüfen...

    GreetZ RiDER

  6. #6
    Fortgeschrittener
    Registriert seit
    19.02.2008
    Beiträge
    35

    Standard

    WTF XD
    Nachts nimmer programmieren da kopiert man n scheiß zusammen hier:
    Code:
    #include <stdio.h>
    
    float rechnung(float ge,float gr){ 
         
          return ge/gr/gr; 
          }
    
    
    int main(void){
        float gewicht;
        float groesse;
        float BMI;
        
        printf("Bitte Gewicht in KG angeben:");
        scanf("%f",&gewicht);
        printf("Bitte Groesse in Meter angeben:");
        scanf("%f",&groesse);
        
        BMI = rechnung(gewicht,groesse);
    
        printf("%.2f",BMI);
        
        fflush(stdin);
        getchar();
        return 0;
    }
    Und was murks? hab da noch nie was gemerkt, bin allerdings ja erst n paar tage im Programmieren aktiv also wird noch
    Und zu return ge/gr/gr... Thx wusst ich nich dass das so auch geht
    wieder was gelernt...
    Mfg DevilC

  7. #7
    CIH-Virus Avatar von -[RiDER]-
    Registriert seit
    05.01.2007
    Beiträge
    496

    Standard

    Hi

    [scanf() macht Murks]
    Zitat Zitat von DevilC
    Und was murks? hab da noch nie was gemerkt, bin allerdings ja erst n paar tage im Programmieren aktiv also wird noch .
    Code:
    $ ./bmi
    Bitte Gewicht in KG angeben:foo
    Bitte Groesse in Meter angeben:0.00$
    Nach Eingabe von foo macht das Programm nur noch undefinierten "Murks".
    Praktischer Weise gibt scanf() null zurück, wenn es zu einem "matching failure" kommt. Aber bis Du eine sinnvolle Methode gefunden hast, diesen Fehler zu behandeln, hast Du schon drei Möglichkeiten gefunden, die ohne scanf() auskommen.

    Eine einigermaßen verträgliche Lösung mit scanf() wäre vielleicht
    Code:
    [...]
      printf("Bitte Gewicht in KG angeben:");
      if(!scanf("%f",&gewicht))
      {
        puts("matching failure");
        exit(EXIT_FAILURE);
      }
      printf("Bitte Groesse in Meter angeben:");
      if(!scanf("%f",&groesse))
      {
        puts("matching failure");
        exit(EXIT_FAILURE);
      }
    [...]
    Wenns an Strings geht ist das nicht mehr so einfach.
    Weil ich faul bin, nur ein http://www.dclc-faq.de/kap11.htm#11.9

    Grundsätzlich ist scanf() so heikel, dass man besser dran ist, wenn man fgets() verwendet und den String selbst parst.

    GreetZ RiDER

  8. #8
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Zitat Zitat von DevilC
    Nachts nimmer programmieren da kopiert man n scheiß zusammen hier:
    Ich glaube die Moral sollte eher lauten: "Nachts nimmer kopieren", da Programmieren keines Falls (nur) aus Kopieren bestehen "sollte"


    mfG. BlackBerry

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  9. #9
    Bad Times Virus
    Registriert seit
    04.03.2008
    Beiträge
    506

    Standard

    devilc hat in einem satz die wörter "programmieren" UND "KOPIEREN" verwendet..... TÖTET IHN

    ne joke aber blackberry hat recht

  10. #10
    Fortgeschrittener
    Registriert seit
    19.02.2008
    Beiträge
    35

    Standard

    Ja is richtig "Nimmer Kopieren" hab den quellcode ja selbst geschrieben, und dann hier rein kopiert.^^
    Und programmieren sollt eig nur zum kleinsten teil aus kopieren bestehen oder gleich gar nicht Oo

    EDIT: Naja programmieren sollt man auch nimmer hab das ja nachts programmiert deshalb steht da son scheiß wie void function(void) drin :>
    obwohl das durchs rumprobieren war, vorher stand da float function(iwas, iwas);
    Mfg DevilC

Seite 1 von 2 12 LetzteLetzte

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •