Wie mache ich bestimmte Berechnungen unsichtbar? (BMI-Rechner)



  • #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
        /* Erster Schritt ; Deklarieren der Variablen*/
    
        float BMI, Kgewicht, Kgroesse, multi, BMIreal;
        multi = 10000;
    
        printf("                                                        BMI-Rechner\n\n\n");
    
        printf("                                                        Bitte geben sie hier ihre Koerpergroesse ein");
        printf("\n");
        scanf("                                                        %f", &Kgroesse);
        printf("\n\n");
    
        printf("                                                        Bitte geben sie hier ihre Gewicht ein");
        printf("\n");
        scanf("                                                        %f", &Kgewicht);
        printf("\n\n");
    
        BMI = Kgewicht/(Kgroesse*Kgroesse);
        printf("%f = %f/(%f*%f)", BMI, Kgewicht, Kgroesse, Kgroesse);
        printf("\n");
    
        printf("%f", BMI);
    
        BMIreal = (BMI*multi);
        printf("%f = %f*%f", BMIreal, BMI, multi);
        printf("\n\n\n\n");
    
        printf("                                                        Dein BMI betraegt %.2f", BMIreal);
        printf(".\n\n");
    
        return 0;
    
    }
    

    Mein Ziel ist es NUR die Berechnungen unsichtbar zu machen, aber wie das geht weiß ich nicht.

    Dieser Ablauf soll nicht auf der Kommandozeile sichtbar sein:

    printf("%f = %f/(%f*%f)", BMI, Kgewicht, Kgroesse, Kgroesse);
        printf("\n");
    
        printf("%f", BMI);
    
        BMIreal = (BMI*multi);
        printf("%f = %f*%f", BMIreal, BMI, multi);
    

    Ja, das Programm ist eigentlich größer und könnte kürzer sein, aber ich wollte mal rumprobieren. xD



  • Dann druck es nicht.



  • Noch was:

    Die Leerzeichen haben bei scanf eine (ganz) andere bedeutung als bei printf .
    Mehr als ein Leerzeichen ist eh überflüssig und vor einem %f ist auch keins nötig, da Leerzeichen dort immer überlesen werden.

    Diese Funktionen haben bis auf eineige Formatspecifier und variabler Argumentenlist nicht viel gemeinsam.
    Schließe daher nicht von dem Verhalten der einen Funktion auf die Andere.



  • hat sogar mit den Leerzeichen geklappt xD irgendwie



  • Bladestorm schrieb:

    hat sogar mit den Leerzeichen geklappt xD irgendwie

    Ich habe auch nicht geschrieben, dass das verboten oder üngültig ist.

    Es ist überflüssig, macht keinen Sinn, verlangsamt das Programm.



  • #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
        /* Erster Schritt ; Deklarieren der Variablen*/
    
        float BMI, Kgewicht, Kgroesse, Multiplikator, BMIreal;
        Multiplikator = 10000;
    
        printf("\t\t\t\t\t\tBMI-Rechner\n\n\n");
        printf("\t\t\t\t\t\tBitte geben sie hier ihre Koerpergroesse (Einheit: cm) ein");
    
        printf("\n\t\t\t\t\t\t");
        scanf("%f", &Kgroesse); /* Eingabenaufforderung xD */
    
        printf("\n\n\t\t\t\t\t\tBitte geben sie hier ihre Gewicht ein\n");
        printf("\t\t\t\t\t\t");
        scanf("%f", &Kgewicht); /* Eingabenaufforderung xD */
        printf("\n\n");
    
        BMI = Kgewicht/(Kgroesse*Kgroesse);
        printf("%f = %f/(%f*%f)", BMI, Kgewicht, Kgroesse, Kgroesse);
        printf("\n");
    
        printf("%f", BMI);
    
        BMIreal = (BMI*Multiplikator);
        printf("%f = %f*%f", BMIreal, BMI, Multiplikator);
        printf("\n\n\n\n");
    
        printf("\t\t\t\t\t\tDein BMI betraegt %.2f", BMIreal);
        printf(".\n\n");
    
        for(;;);
    
        return 0;
    
    }
    

    Na ja, irgendwie wollte ich es zentriert haben. Aber wie ich die Berechnungen unsichtbar mache (also nicht das was eingegeben wurde), kann ich noch immer nicht.



  • Weißt du, was printf macht?



  • Es gibt nur einen Text aus... wenn vorhanden, dann auch mit Variablen.
    Genauer weiß ich es nicht.



  • Was willst du genau? Die Berechnung ausblenden kannst durch weglassen von Zeile 28 etc. Die Eingabe ausblenden, dh. eine unsichtbare Eingabe, ähnlich der Passworteingabe beim Windows Telnetclient geht mit Standardmitteln nicht.



  • #include <stdio.h>
    
    int main(void)
    {
        float BMI, Kgewicht, Kgroesse, Multiplikator, BMIreal;
        Multiplikator = 10000;
    
        printf("\tBMI-Rechner\n\n\n");
        printf("\tBitte geben sie hier ihre Koerpergroesse (Einheit: cm) ein\n\t ");
        scanf("%f", &Kgroesse);
    
        printf("\n\t Bitte geben sie hier ihre Gewicht (Einheit: kg) ein\n\t ");
        scanf("%f", &Kgewicht);
    
        BMI = Kgewicht/(Kgroesse*Kgroesse);
        printf("\t %f = %f/(%f*%f)", BMI, Kgewicht, Kgroesse, Kgroesse);
        printf("%f", BMI);
    
        BMIreal = BMI*Multiplikator;
        printf("%f=%f*%f", BMIreal, BMI, Multiplikator);
    
        printf("\n\t Dein BMI betraegt %.2f", BMIreal);
    
        for(;;);
    
    }
    

    Na gut, jetzt habe ich es bearbeitet.
    Hat jemand Verbesserungsvorschläge bezüglich der Codequalität?

    Nur bei einer Sache bin ich mir nicht sicher, muss

    return 0;
    

    dabei sein? Oder gibt es dann eine Lücke? 🙂 weil wenn

    for(;;);
    

    kommt, dann wird ja alles gestoppt und return 0; wird nicht gelesen. Das heißt "return 0;" muss nicht immer vorkommen. [<--- Laut meiner Theorie]

    Nun ja,

    for(;;);
    

    habe ich gegoogelt, also nach einem ERsatz für

    System.("PAUSE);
    

    Manchmal frage ich unnötig, aber na ja... was printf wirklich genau macht, das weiß ich jz nicht, wenn

    "\t"
    

    unnötig ist. xD



  • Bei for(;; ); wird nicht alles gestoppt, sondern der Prozess läuft in einer Endlosschleife.

    Du brauchst weder ein Endlosschleife noch ein getchar() noch ein system("Pause")

    Starte das Programm in einer offenen Konsole. Schließlich ist es ein Konsolenprogramm.
    Dann kannst du auch die Ausgaben noch sehen.

    Manche Entwicklungsumgebungen bieten aber auch die Möglichkeit, das (eigene) Konsolenfenster offen zu lassen.

    Bladestorm schrieb:

    Es gibt nur einen Text aus... wenn vorhanden, dann auch mit Variablen.
    Genauer weiß ich es nicht.

    Es gibt formatierte Daten aus.
    Da du ja weißt, das printf die Ausgabe macht, verstehe ich deine ursprüngliche Frage nicht:

    Bladestorm schrieb:

    Mein Ziel ist es NUR die Berechnungen unsichtbar zu machen, aber wie das geht weiß ich nicht.

    Wer hat behauptet, das "\t" unnötig ist.
    \t ist wie auch \n eine Escapesequenz (ja, das ist dein Suchwort)

    Und noch eine Referenz zu printf: http://www.cplusplus.com/reference/cstdio/printf/



  • Ach sooo, danke. xD
    Oh, die Vorgabe war vom Lehrer... na ja, der hat so von C# geredet und nun ja, momentan blicken wir nur in Programmiersprachen rein. Also programmieren nicht wirklich, sondern eher technische Informatik. xD

    hab an sowas wie "private" von C# gedacht oder "public". Daher xD



  • C# ist eine ganz andere Sprache als C.

    Wenn ihr nur reinschnuppern wollt, dann schaut euch die "Hallo Welt!"-Programme an: https://de.wikipedia.org/wiki/Liste_von_Hallo-Welt-Programmen/Höhere_Programmiersprachen


  • Mod

    Bladestorm schrieb:

    hab an sowas wie "private" von C# gedacht oder "public". Daher xD

    Du meinst, die an der Rechnung beteiligten Objekte und Funktionen sollen für den Compiler/Programmierer von außerhalb unsichtbar sein? Das Stichwort, um solch einen Effekt in C zu erreichen, lautet "PIMPL". Wobei es hier ziemlich albern wäre, die Rechnung, die schließlich nur aus der Zeile 24 besteht, hinter einem Pointer zu verstecken, da es gar keine nennenswerten Implementierungsdetails gibt, die man verstecken könnte. Das PIMPL-Objekt wäre leer. Man benutze daher eine Funktion. Dies versteckt ebenfalls die Umsetzung.

    Diese Frage hättest du auch gleich sehr viel deutlicher ausdrücken können. Lies dir mal deine alten Beiträge durch und stell dir vor, wie ein Fremder deine Fragen interpretieren würde. Klare Ausdrucksweise ist in der schriftlichen Kommunikation extrem wichtig.


Log in to reply