Was gibt die scanf-Funktion zurück?

Lesezeit: 3 Minuten

Benutzeravatar von Rachit
Rachit

Welchen Wert gibt scanf zurück, wenn:

int g;
int p = scanf("%d", &g);      // Originally: int p = scanf("%d", g);

Ich weiß, dass die Signatur der scanf Funktion ist:

int scanf(const char *format, ...)

Was ist der int Wert, der von dieser Funktion zurückgegeben wird?

  • @Bulwersator Wenn jemand die Manpage nicht lesen kann, dann ist dies nicht das Forum für solche Fragen. In diesem Fall kann es in allen Programmiersprachen Tausende von Was-ist-der-Rückgabewert-der-Funktion-XYZ geben. Dieser Frage fehlt die sehr grundlegende Forschung und sollte nicht gefördert werden.

    – PP

    17. April 2014 um 6:34 Uhr


Benutzeravatar von NPE
NPE

Von dem man Seite:

NAME
       scanf,  fscanf, sscanf, vscanf, vsscanf, vfscanf 

       ...

RETURN VALUE
       These functions return the number of input items  successfully  matched
       and assigned, which can be fewer than provided for, or even zero in the
       event of an early matching failure.

       The value EOF is returned if the end of input is reached before  either
       the  first  successful conversion or a matching failure occurs.  EOF is
       also returned if a read error occurs, in which case the error indicator
       for  the  stream  (see ferror(3)) is set, and errno is set indicate the
       error.

In Ihrem Fall, scanf() zurückkehren kann 0, 1 oder EOF.

  • scanf() gibt die Anzahl der erfolgreich gescannten und zugewiesenen Elemente zurück. Wenn die Formatzeichenfolge ist "%s %d %f %*s%n %d", es gibt 4 zurück, wenn alles funktioniert. Das %*s unterdrückt die Zuweisung, sodass sie nicht gezählt wird, und die %n gibt einen Offset zurück und wird nicht gezählt. Wenn Sie 0, 1, 2 oder 3 erhalten, ist etwas schief gelaufen. Sie erhalten EOF nur dann zurück, wenn keine Daten mehr zum Lesen vorhanden sind oder ein Eingabefehler vorliegt (kein Formatfehler, sondern ein ‘Hardware’-Fehler). Mit einer "%d" Format, es gibt nur eine Konvertierung, also bekommst du EOF, 0 oder 1.

    – Jonathan Leffler

    22. April 2017 um 0:41 Uhr


Aus Scanf:

Bei Erfolg gibt die Funktion die Anzahl der erfolgreich gelesenen Elemente zurück. Diese Zählung kann der erwarteten Anzahl von Messwerten oder weniger entsprechen, sogar null, wenn ein Übereinstimmungsfehler auftritt. Im Fall eines Eingabefehlers, bevor Daten erfolgreich gelesen werden konnten, wird EOF zurückgegeben.

Technisch gesehen ist dies UB (Undefiniertes Verhalten).

int g;
int p=scanf("%d",g);
                 ^

Sie übergeben eine nicht initialisierte Ganzzahl an scanf, um sie als Adresse zum Schreiben zu verwenden. Ab diesem Zeitpunkt kann alles passieren. Höchstwahrscheinlich wird Ihre App abstürzen.

  • Die Frage wurde (fälschlicherweise) bearbeitet, daher sind jetzt alle Antworten ungültig.

    – SS Anne

    5. September 2019 um 11:19 Uhr

  • Ich habe eine (korrigierte) Version des ursprünglichen Codes wiederhergestellt und den falschen Code, den diese Antwort anspricht, als Kommentar hinterlassen. Die Bearbeitung, die den Code insgesamt entfernte, war schlecht!

    – Jonathan Leffler

    14. Februar um 5:33 Uhr

Benutzeravatar von Shubham Nigam
Shubham Nigam

Was auch immer Sie in der VDU-Eingabe eingeben, geht an die Variable g und wenn erfolgreich gelesen, p gleich 1.

Es wird 1 zurückgegeben, da scanf die Anzahl der erfolgreich gelesenen Elemente zurückgibt

  • Was ist, wenn jemand eintritt bbldnai? Es wird dann sicherlich nicht 1 zurückgeben.

    – SS Anne

    5. September 2019 um 11:18 Uhr

  • Was ist, wenn jemand eintritt bbldnai? Es wird dann sicherlich nicht 1 zurückgeben.

    – SS Anne

    5. September 2019 um 11:18 Uhr

1387290cookie-checkWas gibt die scanf-Funktion zurück?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy