scanf-Eingabeschleife frühzeitig beenden



  • Ich würde gerne ein Array mit integer Werten füllen.
    Habe dafür folgende kleine Schleife gebastelt:

    for(i=0;i<MAX;i++)                     //MAX ist die größe des Arrays
        {
                         printf("Gib die %i. Zahl ein: ",i+1);
                         scanf("%i",&a[i]);
        }
    

    Jedoch brauche ich jetzt etwas mit dem ich die Eingabe vorzeitig beenden kann.
    Per druck auf die Enter taste funktioniert nicht bei scanf und zum beenden eine Zahl ist schlecht, da man ja alle Zahlen verwenden können soll.
    Und wenn ich einen Buchstaben eintippe gibt er alle printf's bis zum Schleifenende aus und macht dann weiter, was blöd ist wenn später mal mehr Zahlen eingelesen werden sollen.
    Also, was tun??

    mfg
    Fl0h



  • Du kannst auch den Rückgabewert von scanf auswerten.
    siehe http://www.cplusplus.com/reference/clibrary/cstdio/scanf/

    for(i=0;i<MAX;i++)                     //MAX ist die größe des Arrays
        {
                         printf("Gib die %i. Zahl ein: ",i+1);
                         if (scanf("%i",&a[i]) < 1) 
                           break;
        }
    


  • Ja danke wusste ich nicht.
    Was ich aber wissen wollte ist, welche Abfrage ich machen muss damit bei einem Tastendruck z.b. Leertaste/Enter o.ä.(hauptsache keine Zahlen) die Eingabe frühzeitig abgebrochen wird.
    Also, dass ich dann auch nur 3 Werte einlesen kann und den Array nicht füllen muss.



  • Das kannst du mit DirkBs Vorschlag realisieren. scanf() gibt die Anzahl der zugewiesenen Elemente zurück. In deinem Fall wird also 1 zurückgegeben, wenn eine Zahl eingetippt wurde. Tippt der Nutzer hingegen etwas anderes ein, kann scanf() nichts zuweisen und gibt demzufolge 0 zurück.



  • Ah, so war das gemeint!
    Danke vielmals, ich versteh's jetz und funktioniern tuts auch! 😃
    Als ich DirkB's Vorschlag gelesen habe dachte ich, dass die Bedingung erfüllt wird wenn eine Zahl eingegeben wird die kleiner als 1 ist 😣
    Ich hab nicht an den Rückgabewert gedacht!

    mfg
    Fl0h


Log in to reply