2013-05-27 18 views
7

Ich bin ein Anfänger lernen C und versuchen, den folgenden Code aus einem Online-Vortrag zu verstehen. Es scannt eine Zeichenfolge nach einer Ganzzahl; Wenn Zeichen gefunden werden, schlägt der sscanf fehl.sscanf Verhalten/Rückgabewert

Ich habe die man-Seiten für sscanf gelesen und bin immer noch verwirrt über die Überprüfung des Rückgabewerts und warum dieser Code funktioniert. Sie geben an, dass "diese Funktionen die Anzahl der zugewiesenen Eingabeelemente zurückgeben".

Wenn sscanf nur auf Zeichen stößt, schreibt es sie in & c ... aber in diesem Fall wurde & n nicht geschrieben. In diesem Fall hätte ich gedacht, dass der Rückgabewert von sscanf immer noch 1 wäre?

+2

'sscanf' wird nicht über die'% d' überspringen, um die '% c' zu essen. Wenn es zuerst keine Nummer trifft, gibt es 0 zurück. –

+0

Aus irgendeinem Grund entging mir die Tatsache, dass sscanf strikt in der Reihenfolge (pro Formatzeichenkette) tat, völlig. Vielen Dank! – drjimmie1976

Antwort

6

Wenn sscanf erfolgreich %d gelesen hat und sonst nichts, würde 1 zurückgegeben (ein Parameter wurde zugewiesen). Wenn vor einer Zahl Zeichen vorhanden wären, würde 0 zurückgegeben (es wurden keine Parameter zugewiesen, da zuerst eine Ganzzahl gesucht werden musste, die nicht vorhanden war). Wenn es eine Ganzzahl mit zusätzlichen Zeichen gäbe, würde sie 2 zurückgeben, da sie beide Parameter zuordnen konnte.

+0

Danke. Ich dachte, das Verhalten wäre nur um zu speichern, unabhängig von der Reihenfolge, daher die Verwirrung. – drjimmie1976

2

Sie können jederzeit überprüfen, was eine Funktion zurückkehrt, indem es in einer printf Aussage wie unten setzen:

printf("%d",sscanf(string, " %d %c", &n, &c)); 

Dies wird wahrscheinlich Ihre Zweifel klar durch den Rückgabewert von sscanf auf Ihrem Terminal ausdrucken.

Sie können auch diese Besuche: cplusplus : sscanf

Hope that :) half

+0

Meinten Sie printf ("% d \ n", sscanf (string, "% d% c", & n, &c)); '? – rootkea

+0

) Ja, vielen Dank für die Erwähnung :) –

4

Ihre sscanf(string, " %d %c") kehrt EOF, 0, 1 oder 2:

2: Wenn Ihre Eingabe entspricht der folgenden
[Optionale Leerzeichen] [Dezimalstellen *] [Optionale Leerzeichen] [beliebiges Zeichen] [Extra ignoriert]

1: Wenn Sie Ihre Eingabe fehlgeschlagen oben, jedoch angepasst folgende
[Optional Leerzeichen] [Dezimalstellen *] [Optional Leerzeichen] [keine Daten mehr]

[Korrektur]
0: Wenn Sie Ihre Eingabe, nach Leerzeichen und ein optionales Zeichen, haben keine Ziffer gefunden: Beispiele: "z" oder "-".

EOF: Wenn der Eingang leer war "" oder nur Leerzeichen.

  • die dezimalen Ziffern können +- oder durch ein Zeichen vorangestellt werden.