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
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.
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
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
13872900cookie-checkWas gibt die scanf-Funktion zurück?yes
@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