Nach scanf hängt Programm! Versteh net warum



  • @Bashar: Danke für den Hinweis!

    Ich nehme mal das keiner von euch nen Fehler sieht sonst hätte wahrscheinlich jemand geantwortet. Könnten sich welche von euch erbarmen und den Code mal bei sich ausprobieren? Und falls es funktionieren sollte mir mitteilen welche Entwicklungsumgebung er benutzt?

    mfg Alex



  • AlexDozer schrieb:

    Ich nehme mal das keiner von euch nen Fehler sieht sonst hätte wahrscheinlich jemand geantwortet.

    c.rackwitz schrieb:

    im formatstring deines scanf sind die leerzeichen das problem. lass sie weg. warum hast du da ueberhaupt leerzeichen reingemacht?



  • in deinem scanf-formatstring sind die leerzeichen zu viel. mach sie weg.

    GCC/MinGW

    edit: jetz bin ich doch tatsaechlich zu lahm fuer mich 😉



  • Vielen Dank Leute. Warum ich die Leerzeichen reingemacht habe weis ich auch nicht so genau. Ich denke weils besser aussieht 🙂 Ich hätte den Fehler aber nicht gefunden muss ich zugeben. Naja bin halt noch ein Anfänger 🙄

    mfg Alex



  • c.rackwitz schrieb:

    in deinem scanf-formatstring sind die leerzeichen zu viel. mach sie weg.

    Genaugenommen stört nur das Leerzeichen nach dem '%d'. Das vorne stehende Leerzeichen frißt einfach alle Whitespaces auf, auch 0, wenn gerade keine da sind (und ist in diesem Fall überflüssig, aber nicht falsch).



  • Ich muss euch nochmal nerven. Ich hab mein Programm weiter geschrieben und komme jetzt schon wieder net weiter 😞 Diesmal hab ich das Problem das manche Befehle einfach nicht ausgeführt werden. Hier mal mein Code:

    #include <stdio.h>
    
    int main (void)
        {
        int iBit1[8];
        int iBit2[8];
    
        printf ("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
        printf ("+ Dieses Programm dient dazu die Rechnungen einer CPU zu simulieren! +\n");
        printf ("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n");
    
        printf ("Bitte geben sie die erste Dualzahl ein: ");
        scanf  ("%d%d%d%d%d%d%d%d",&iBit1[0],&iBit1[1],&iBit1[2],&iBit1[3],&iBit1[4],&iBit1[5],&iBit1[6],&iBit1[7]);
        printf ("-------------------------------------------------------\n\n");
    
        printf ("Nun bitte die zweite Zahl eingeben: ");
        scanf  ("%d%d%d%d%d%d%d%d",&iBit2[0],&iBit2[1],&iBit2[2],&iBit2[3],&iBit2[4],&iBit2[5],&iBit2[6],&iBit2[7]);
        printf ("-------------------------------------------------------\n\n");
    
        printf ("Sind die Zahlen Vorzeichenbehaftet? s=Signed u=Unsigned:");
        int iVorzeichen;           
        iVorzeichen = getchar();  //Das hier wird nicht ausgeführt!
    
    	return 0;
    
        }
    

    Nach dem letzten printf wird das Programm einfach beendet. Aber normalerweise müsste er hier noch ein Zeichen einlesen. Aber das macht er einfach nicht. Nach printf ist das Programm beendet.

    Ich habs auch schon damit probiert:

    scanf ("%d", &iVorzeichen);
    

    oder mit

    char cVorzeichen;
    scanf ("%c", &cVorzeichen);
    

    Aber er macht das immer net und ich seh wieder mal keinen Fehler 😞 Ich wollte jetzt nicht nochmal nen Extra-Thread aufmachen deswegen hab ich es hier rein!

    mfg Alex



  • vielleicht liegen noch sachen im eingabepuffer und deshalb wird getchar()
    "übersprungen".
    wenns daran liegt, dann schau mal in die faq



  • Durch deinen Hinweis bin ich jetzt mittlerweile bisschen schlauer. Ich hab die ersten 2 scanf-Funktionen auskommentiert. Jetzt gehts. Anscheinend ist wirklich nach der Eingabe der Dualzahlen noch was im Eingabepuffer.

    mfg Alex

    edit: Gibts eine Möglichkeit den Eingabepuffer durch Befehl zu löschen?

    edit2: Ja geht mit fflush(stdin);



  • AlexDozer schrieb:

    edit2: Ja geht mit fflush(stdin);

    😡 http://www.c-plusplus.net/forum/viewtopic-var-t-is-39349.html



  • Hallo,

    AlexDozer schrieb:

    edit: Gibts eine Möglichkeit den Eingabepuffer durch Befehl zu löschen?

    du kannst

    while (getchar()!='\n');
    

    nach deinen scanfs einbauen. Das zieht den Rest aus dem stdin raus. Dass fflush(stdin) keine gute Idee ist, wurde ja schon gesagt.

    Mfg

    GPC



  • Das mit dem fflush(stdin) scheint keine gute Lösung zu sein 😮

    Dann gewöhn ich mir am besten gleich an immer die Schleife zu verwenden. Vielen Dank! Echt cooles Forum hier!



  • so ists besser:
    int c; while ((c = getchar()) != EOF && c != '\n');

    es muss ein int sein und das EOF muss geprueft werden.


Anmelden zum Antworten