Nur Enter Eingabe bei scanf("%i..) abfangen?



  • Ich lese mit scanf() ein Integer ein. Nun kann es sein das ich mal den Wert nicht brauch und nur Enter drücken will, aber scanf() erwartet nen Wert. Wie kann man das umgehen ohne z.b ne vorherige Abfrage oder so.

    mfg



  • Du verwendest zum Einlesen fgets() und lässt den String dann von sscanf() verarbeiten. Wenn das 1. Element des Strings '\n', Schleife beenden. Du kannst aber auch den Rückgabewert von sscanf() überprüfen. Das liefert EOF wenn nichts verarbeitet wurde.

    Die Stringlänge von 11 passt genau für einen int auf 32-Bit-Systemen (4 Byte).

    #include <stdio.h>
    
    int main(void)
    {
        char temp[11] = "";
        int zahlen[30], i = 0;
    
        for(i=0; i < 30; i++)
        {
            fgets(temp, 11, stdin);
    
            if(temp[0] == '\n')
                break;
    
            sscanf(temp, "%d", &zahlen[i]);
        }
    
        return 0;
    }
    

    Oder den Rückgabewert von sscanf() prüfen, noch eleganter:

    #include <stdio.h>
    
    int main(void)
    {
        char temp[11] = "";
        int zahlen[30], i = 0;
    
        for(i=0; i < 30; i++)
        {
            fgets(temp, 11, stdin);
    
            if(sscanf(temp, "%d", &zahlen[i]) == EOF)
                break;
        }
    
        return 0;
    }
    

Anmelden zum Antworten