Werte einlesen mit scanf

#1
Hallo, ich beschäftige mich noch nicht so lange mit dem Thema, bin gerade dabei die Programmiersprache C mithilfe des Buches "Grundkurs C" von Jürgen Wolf zu lernen.

Jetzt stoße ich auf folgendes Problem.

Ich versuchte diesen Code umzusetzen:


C:
#include <stdio.h>

int main (void) {
    
    int iVar=0;
    
    printf("Bitte eine Ganzzahl eingeben:");
    int check = scanf("%d", &iVar);
    if(check == E0E) {
        
        printf("Fehler bei scanf...\n");
        return 1;
    }
    printf("%d Wert(e) eingelesen;", check);
    printf("der eingegebene Wert lautet: %d\n", iVar);
    printf("Die Adresse von iVar lautet: %p\n", &iVar);
    
    return 0;

}

Allerdings wird in Zeile 9 der Fehler "error: 'E0F' was not declared in this scope
                                                              if(check == E0F )"  ausgegeben. (übringens programmiere ich mit MinGW)

Jetzt weiß ich nicht wirklich wie ich "E0F" deklarieren sollte.

Danke schon mal fürs durchlesen,

Lg limit
 
#3
Ja bin ich, aber habs auch schon mit E, O, F, versucht xD

Es heißt im Buch "Die Funktion scanf gibt E0F (häufig als -1 implementiert) zurück, wenn ein Fehler vor der Konventierung bei der Funktion scanf aufgetreten ist"

Ausgabe sollte folgendermaßen aussehen:

Bitte eine Ganzzahl eingeben: 12345
1 Wert(e) eingelesen; der eingegebene Wert lautet: 12345
Die Adresse von iVar lautet: 000000000013ff04


"Das Problem an diesem Beispiel ist allerdings noch, dass der zurückgegebene E0F-Fehler nicht aussagt, ob auch ein gültiger Integerwert eingelesen wurde"

Weshalb die 'wasserdichtere' Überprüfung dann so aussehen sollte:

Code:
#include <stdio.h>

int main (void) {
    
    int iVar = 0;
    
    printf("Bitte eine Ganzzahl eingeben: ");
    int check = scanf("%d", &iVar);

    if(check == E0F ) {
        
        printf("Fehler bei scanf...\n");
        return 1;
    }
    if (check !=1) {
        printf("Fehler bei der Eingabe\n");
        return 1;
    }
    
    printf("%d Wert(e) eingelesen; ", check);
    printf("der eingegebene Wert lautet: %d\n", iVar);
    printf("Die Adresse von iVar lautet: %p\n", &iVar);
    
    return 0;
}
Ich frage mich einfach was es mit diesem E0F-Fehler in der scanf-Funktion auf sich hat.
 

German

Well-Known Member
c-b Experte
#4
Den Fehlerfall wirst nahezu nie haben. Du kannst folgendes versuchen: Starte dein Programm aus der Kommandozeile, wobei du ein leeres Textdokument an das stdin deines Programms umleitest. In dem Fall sollte scanf dir ein EOF (und es ist der Großuchstabe O, denn der Macroname steht für End Of File) zurückgeben.
 
Oben