2017-01-01 11 views
-2

Was genau, wenn ich die folgendenKomma zwischen den beiden Zahlen bei der Eingabe

scanf("%d,%d", &i, &j); 

tun geschieht und einen Eingang zur Verfügung stellen, die die passenden Fehler verursacht? Wird es Müll in j speichern?

+3

Was ist Ihre Eingabe? –

+0

Sieht aus wie eine Verdopplung von: http://stackoverflow.com/questions/15091284/read-comma-separated-input-with-scanf –

+3

[Warum nicht die Handbuchseite lesen] (https://linux.die.net/ man/3/scanf) –

Antwort

5

Der Eingang muss genau das Format für scanf() geliefert entsprechen Erfolg.

Zitiert C11, Kapitel §7.21.6.2, fsacnf(), (emphasis Mine)

Außer im Fall eines % Spezifizierer, der Eingangspunkt (oder im Falle einer %n Richtlinie Die Anzahl der Eingabezeichen) wird in einen für den Konvertierungsspezifizierer geeigneten Typ konvertiert. Wenn das Eingabeelement keine übereinstimmende Sequenz ist, schlägt die Ausführung der Anweisung fehl: Diese Bedingung ist ein Übereinstimmungsfehler. Wenn die Zuweisungsunterdrückung nicht durch *, angezeigt wurde, wird das Ergebnis der Konvertierung in das Objekt gesetzt, auf das das erste Argument nach das Format-Argument zeigt, das noch kein Konvertierungsergebnis erhalten hat. Wenn dieses Objekt keinen geeigneten Typ hat oder wenn das Ergebnis der Konvertierung im Objekt nicht dargestellt werden kann, ist das Verhalten nicht definiert.

und

Wenn alle Richtlinien ausgeführt wurden oder wenn eine Richtlinie nicht (wie unten beschrieben), die Funktion zurückkehrt.

also die oben genannten Fälle Konsolidierung

  • Für eine Eingabe wie 100, 200, wird der Scan-Erfolg. Sowohl i als auch j enthalten die angegebenen Werte 100 bzw. 200.

  • Für einen Eingangs wie 100 - 200, wird die Abtastung (Matching failure) fehlschlagen und der Inhalt von j bleiben unverändert, das heißt, wird j jeder beliebige Wert von scanf() Operation nicht zugeordnet.

Wort Hinweis: Überprüfen Sie immer den Rückgabewert von scanf() Funktion Familie den Erfolg der Funktionsaufruf zu gewährleisten.

Verwandte Themen