Brauch hilfe



  • Hallo liebe freunde, habe folgendes Problem. Ich bin gerade dabei ein Programm zu schreiben das viele if/else bedingungen hat.Aber irgendwie funktioniert meine Text eingabe nicht und ich weiss nciht wieseo????
    Hier ist mein quellcode bitte beachtet die Aufgabe erst ab der 3.Beding.Also ab if(auswahl==3) hier ist mein quellcode. Achsoo!!!! Das Programm ist in c geschrieben worden.

    #include<stdio.h>

    int main () {

    char TextA[100];
    char TextB[100];
    int auswahl=0,zahl1=0,zahl2=0,wert=0,i=1;
    char operatoren,istgleich;
    float ergebnis=0,durschnitt=0,summe=0,noten[20];

    printf("\nDieses Programm hat 3 funktionen. Die erste Funktion ist der Taschenrechner,die zweite Funktion ist die Notenberechnung und die dritte Funktion ist Text eingaben\n");

    printf("Bitte wählen sie ein der Programme aus.\n Taschenrechner =|1|\n Notenberechnung = |2|\n Textfunktionen(strings) = |3|.");

    scanf("%d",&auswahl);

    if(auswahl==1){
    printf("\nSie haben sich für die Taschenrechner funktion entschieden.\n Dies ist eine Taschenrechner simulation.\n");

    printf("\nBitte geben sie ihre zu berechnen werte ein\n");

    scanf("%d %c %d %c",&zahl1,&operatoren,&zahl2,&istgleich);

    switch(operatoren){
    case'+':ergebnis=zahl1+zahl2;break;
    case'-':ergebnis=zahl1-zahl2;break;
    case'/':ergebnis=zahl1/zahl2;break;
    case'*':ergebnis=zahl1/zahl2;break;
    }
    switch(istgleich){
    case'=':printf("%2.f\n",ergebnis);
    }
    }
    if (auswahl==2) {
    printf("Sie haben sich für das Notenberechnungsprogramm entschieden\n Dieses Programm errechnet ihren Notendurschnitt.\n Wie viele NOten möchten sie eingeben(max. 20)\n");
    scanf("%d",&wert);
    if(wert>20){
    printf("\nEs wurde doch gesagt, das sie nur bis zu 20 Noten eingeben dürfen !!!!!\n");

    }
    else if(wert<0){
    printf("Solch einen Wert gibt es nicht.!!!\n");
    }
    else if (wert<=20){
    printf("\n Sie möchten %d Noten eingeben.\n",wert);
    printf("\nBitte fangen sie bitte an ihre Noten einzelnd einzugeben\n");

    for(i=1;i<=wert;i++){
    printf("Bitte geben sie ihre %d.Note ein\n",i);
    scanf("%f",&noten[i]);
    }
    i=1;
    for(i=1;i<=wert;i++){
    summe+=noten[i];
    }
    printf("\nIhre summe beträgt %.3f ",summe);
    durschnitt=summe/wert;
    printf("\nIhr durschnitt beträgt %.3f ",durschnitt);

    }
    }
    if(auswahl==3){

    printf("Sie haben Text ausgewählt\n");
    printf("Bitte geben sie den ertsen Text ein\n");
    gets(TextA);
    printf("Geben sie den zweiten Text ein\n");
    gets(TextB);

    }
    }



  • Dieser Thread wurde von Moderator/in Dravere aus dem Forum C# und .NET in das Forum C (C89 und C99) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Das liegt daran, dass von der Ersten eingabe imemr noch das "\n" im Puffer ist. Deshalb musst du sowas wie

    if(auswahl==3){ 
       fseek(stdin,0,SEEK_END);
       printf("Sie haben Text ausgewählt\n"); 
       printf("Bitte geben sie den ertsen Text ein\n"); 
       gets(TextA); 
       printf("Geben sie den zweiten Text ein\n"); 
       gets(TextB); 
    }
    

    nutzen.

    Und nutze bitte das nächste Mal die Code Tags 😉





  • DarkShadow44 schrieb:

    Das liegt daran, dass von der Ersten eingabe imemr noch das "\n" im Puffer ist. Deshalb musst du sowas wie

    if(auswahl==3){ 
       fseek(stdin,0,SEEK_END);
       printf("Sie haben Text ausgewählt\n"); 
       printf("Bitte geben sie den ertsen Text ein\n"); 
       gets(TextA); 
       printf("Geben sie den zweiten Text ein\n"); 
       gets(TextB); 
    }
    

    nutzen.

    Und nutze bitte das nächste Mal die Code Tags 😉

    Aber was meinst du jetzt mit Puffer??? Ich habe dieses Problem nicht, wenn ich es nicht in einer Beningung schreibe.



  • scanf liest nur die Zeichen ein, die auch zum Formatspecifier passen.
    Bei %d sind dies nur '+' oder '-' am Anfang für ein Vorzeichen und die Ziffern.
    Führende Whitespace (Leerzeichen, Tabulatoren und Zeilenvorschübe) am Anfang werden dabei überlesen.
    Der Rest bleibt im Eingabestrom stehen.

    Die Entertaste, mit der du die Eingabe bestätigst, bleibt demnach nach der Zahl stehen (als '\n').
    Ein erneutes scanf würde dies wieder überlesen. Du nimmst aber gets, das ein '\n' als Ende der Zeile auffasst.
    Also wird eine Zeile der Länge 0 eingelesen.



  • achsoo ich verstehe danke. DAvor hatte ich das problem nicht. ich habe dieses programm auch mal ohne eine bedingung geschrieben und da hatte es funktioniert.Also muss ich jetzt immer dieses Seek dort oben benutzen ????????



  • dein vorschlag hat leider nichts gebracht, weil mein programm die erste text eingabe immer noch übersprongt obwohl ich das fseek(.....) benutzt habe.


Anmelden zum Antworten