Subtraktion



  • Guten Abend,
    ich habe hier ein kleines Problem und zwar muss ich ein Programm schreiben, was eine bzw. Subtraktionen durchführt.
    Die Aufgabenstellung lautet wie folgt:
    Ein Benutzer gibt jeweils mehrere Zahlen ein, die alle von der ersten subtrahiert werden. Am Ende wird die Differenz auf dem Bildschirm ausgegeben. Der Benutzer kann beliebig viele Zahlen eingeben (mindestens eine), zu jedem Zeitpunkt aber nur eine, d.h. nach einer Zahleneingabe wird er gefragt, ob er weitere Zahlen eingeben will. Wenn ja, erhält er die Möglichkeit, wenn nein, wird die Differenz ausgegeben. Gibt er nur eine Zahl ein, so wird diese unverändert ausgegeben.

    Mein Problem liegt darin, dass ich nicht weiß, wie es die eingegebene Zahl sich merkt und die weiterfolgenden Zahlen subtrahiert.Zeile 15 habe ich auskommentiert,da das erstmal keinen Sinn macht und auch nicht mehr weiter wusste. Ich bitte um eure Hilfe. Danke im voraus 🙂

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    	char Eingabe;
    	float Zahl;
    	float Ergebnis;
    
    	printf("Das Programm fuehrt eine Subtraktion durch!\n");
    	do
    	{
    		printf("Bitte geben Sie die Zahl ein: ");
    		scanf("%f", &Zahl);
    		//Ergebnis = Zahl-;
    		printf("Moechten Sie noch eine Zahl eingeben? j/n": );
    		scanf("%s", &Eingabe) 
    	}
    	while(Eingabe=='j');
    	printf("Die Differenz betraegt: %f", Ergebnis);
    	return 0;
    }
    


  • puh um die Uhrzeit noch 🙂
    sry, für meine Beschreibung aber es ist schon spät...
    bei Fragen einfach nochmal melden^^

    #include <stdio.h>
    
    int main(){
    
        int i_subtraktion = 0;  //Definieren der Variablen
        int i_ergebnis = 0;     //Natürlich auch mit Float möglich ;)
        int run = 1;            //run = 1 <- wichtig für while - SCHLEIFE
    
        char c_buffer;
    
        printf("Dieses Programm f\x99hrt eine Subtraktion durch\n");            //\x99 steht für ein Ü
        printf("-------------------------------------------------------\n");
    
        printf("Geben Sie eine Zahl ein: ");
        scanf("%i",&i_ergebnis);                                                //Erste Zahl wird gespeichert
    
        while(run){                                                             //run = 1 -> while(1) <- Endlosschleife
        printf("Zahl: ");
        scanf("%i",&i_subtraktion);                                             //Erste Zahl die vom Ergebnis abgezogen wird, wird bestimmt
    
        i_ergebnis = i_ergebnis - i_subtraktion;                                //rechenoperation vom Ergebnis wird eingegebene Zahl abgezogen
    
        printf("Weitere Zahl eingeben? (J)a::(N)ein: ");
        fflush(stdin);
        scanf("%c",&c_buffer);
    
        if((c_buffer == 'N')||(c_buffer == 'n'))                                //wenn n eingegeben wird
        run = 0;                                                                //wird run = 0 und die Schleife bricht ab
    
        }
    
        printf("Ihr Endergebnis ist: %i",i_ergebnis);
    
     fflush(stdin);                                                             //eine Funktion um den Eingabepuffer zu löschen
     getchar();                                                                 //damit getchar() auf eine neue Eingabe wartet
     return 0;
    }
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char Eingabe;
        float Zahl;
        float Ergebnis;
    
        printf("Das Programm fuehrt eine Subtraktion durch!\n");
    
            printf("Bitte geben Sie die Zahl ein: ");
            scanf("%f", &Ergebnis);
    
        while(Eingabe == 'j')
        {  
            printf("Zahl: ");
            scanf("%f",&Zahl);
            Ergebnis = Ergebnis - Zahl;
    
            printf("Moechten Sie noch eine Zahl eingeben? j/n": );
            scanf("%c", &Eingabe)
        }
    
        printf("Die Differenz betraegt: %f", Ergebnis);
        return 0;
    }
    

    So müsste dein Code auch passen^^



  • hi DonnerKeks

    erstmal danke ich dir sehr, dass du dir so spät noch die Zeit genommen hast mir zu helfen 👍 .

    Mit deiner Version, die du gemacht hast kam ich auf diese Ausgabe:

    Dieses Programm f�hrt eine Subtraktion durch
    -------------------------------------------------------
    Geben Sie eine Zahl ein: 20      
    Zahl: 12
    Weitere Zahl eingeben? (J)a::(N)ein: Zahl: 6
    Weitere Zahl eingeben? (J)a::(N)ein: Zahl: n
    Weitere Zahl eingeben? (J)a::(N)ein: 
    Ihr Endergebnis ist: -4.
    

    Ich hatte nicht die Möglichkeit die Frage zu beantworten. Wenn ich mit j beantworte kommt die Frage nochmal. 😕

    Durch deine Hilfe habe ich aber geschafft meine Version noch zu erweitern und habs auch hinbekommen. 😃

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char Eingabe;
        float Zahl;
        float Ergebnis;
    
        printf("Das Programm fuehrt eine Subtraktion durch!\n");
        printf("Bitte geben Sie die Zahl ein: ");
        scanf("%f", &Ergebnis);
        printf("Moechten Sie das Programm noch benutzen? j/n: ");
        scanf("%s", &Eingabe);	
        while(Eingabe == 'j')
        {  
            printf("Bitte geben Sie die naechste Zahl ein: ");
            scanf("%f",&Zahl);
            Ergebnis = Ergebnis - Zahl;
            printf("Moechten Sie noch eine Zahl eingeben? j/n: ");
            scanf("%s", &Eingabe);
        }
    
        printf("Die Differenz betraegt: %.3f\n", Ergebnis);
        return EXIT_SUCCESS;
    }
    


  • hmmm ok 😃
    also bei mir schaut das ganze so aus,

    Dieses Programm führt eine Substraktion durch
    ----------------------------------------------
    Geben Sie eine zahl ein: 10
    Zahl: 4
    Weitere Zahl eingeben? (J)a::(N)ein: j
    Zahl: 2
    Weitere Zahl eingeben? (J)a::(N)ein: n
    Ihr Endergebnis ist 4
    

    aber ist ja nicht schlimm.
    Wenn du dein Programm zum laufen gebracht hast,
    passt ja alles 🙂



  • Ich habe die Posts eben nur überflogen, wollte aber noch anmerken, dass du bei scanf aufpassen musst, dass noch ein newline-Zeichen im Puffer hockt. Wenn du jetzt ein weiteres scanf aufrufst wird das newline, welches noch im Puffer steht, eingelesen und es schaut so als, als ob das scanf übersprungen wird.



  • Du musst auch aufpassen dass du in scanf die Formatierungszeichen verwendest.
    %s steht für einen String. Wenn du nur EIN Buchstabe einlesen willst solltest du %c nehmen, also

    scanf("%c", &Eingabe);
    


  • Binggi schrieb:

    %s steht für einen String. Wenn du nur EIN Buchstabe einlesen willst solltest du

    getchar() nehmen.
    🙂



  • eigentlich solltes du lieber

    fscanf(stdin, "%s", s_string);
    fprintf(stdout, "%s", s_string);

    verweden um undefiniertes Verhalten zu vermeiden 🙂
    mit freundlichen Grüßen



  • O.o schrieb:

    eigentlich solltes du lieber

    fscanf(stdin, "%s", s_string);
    fprintf(stdout, "%s", s_string);

    verweden um undefiniertes Verhalten zu vermeiden

    Was unterscheidet denn ein printf("%s", s_string) von einem fprintf(stdout, "%s", s_string) ?
    🙂



  • Nicht viel 🙂
    lediglich Geschmackssache und ich finde
    es übersichtlicher.

    auch sollte man statt scanf(); lieber scanf_s(); verwenden,
    damit es nicht zu einem Buffer Overflow kommen kann.

    Wenn man das allerdings nur als Freizeitbeschäftigung macht,
    muss es einen nicht umbedingt interessieren 😃



  • O.o schrieb:

    Nicht viel 🙂
    lediglich Geschmackssache und ich finde
    es übersichtlicher.

    Was jetzt, undefiniert oder Geschmackssache?

    O.o schrieb:

    auch sollte man statt scanf(); lieber scanf_s(); verwenden,
    damit es nicht zu einem Buffer Overflow kommen kann.

    scanf_s()? Was ist denn das?

    O.o schrieb:

    Wenn man das allerdings nur als Freizeitbeschäftigung macht,
    muss es einen nicht umbedingt interessieren 😃

    Wenn es dich nicht umbedingt interessiert, warum dann darüber reden?
    🙂



  • einigen wir uns auf undefinierte Geschmackssache? :p
    mich interessiert es schon irgendwie...
    ich weis auch nicht wieso 😉

    scanf_s == scanf nur, dass es bei scanf_s nicht
    zu einem buffer overflow kommen kann. Allerdings
    wird die Funktion nicht von allen Compilern unterstüzt
    und ist demach auch nicht einfach portable.

    schönen Abend noch



  • O.o schrieb:

    scanf_s == scanf nur, dass es bei scanf_s nicht
    zu einem buffer overflow kommen kann.

    💡 Die Funktion scanf kann man so benutzen, dass es zu keinem Pufferüberlauf kommt, indem man die maximale Anzahl der einzulesenden Zeichen im Formatstring festlegt. 💡



  • vielen dank an euch alle 👍 👍


Anmelden zum Antworten