2017-04-15 1 views
0

Ich arbeite an einem Projekt und ich kann nicht herausfinden, wie man einen String mit einem int lesen kann, der nicht immer da ist.C - scanf string mit optional int

Zum Beispiel: Ich habe 2 Variablen

int argument = 0; 
char instruction[16]; 

Und am Eingang:

"string" 57 

Ich will "string" in Unterricht und 57 in Argumente setzen. Das kann ich tun mit

scanf("%s %d", instruction, &argument); 

Problem ist, dass die Eingabe ohne die Zahl sein kann, das heißt

"string" 

Dann würde Ich mag „string“ in der Anweisung setzen und lassen Argument gleich 0 Aber das Programm erwartet eine Nummer nach "string" und wird nicht fortgesetzt, bis es es bekommt.

Wie kann ich Eingaben von stdin lesen, wenn ich 2 verschiedene Arten von Eingaben haben kann? Ich habe mehrere Lösungen ausprobiert, aber keine funktionierte.

Danke

Antwort

4

Sie tun dies, indem Sie nicht versuchen, Standardeingabe direkt zu analysieren. Stattdessen Sie

  1. Lesen Sie eine Zeile der Eingabe mit fgets.
  2. Versuch, diese Zeile in eine ganze Zahl (eventuell mit sscanf) zu analysieren:
    • Wenn Sie Sie haben Ihre ganze Zahl gelingen.
    • Sonst haben Sie die ursprüngliche Zeichenfolge.
+0

Hallo, könnten Sie ein bisschen mehr erarbeiten, wie mit ‚sscanf‘ zu analysieren, um zu versuchen? Vielen Dank –

+3

@ TomášHorecký die Man-Seite ist nächste Station. Bedenken Sie jedoch, dass die Funktionsfamilien "scanf" und "sscanf" alle einen Wert zurückgeben: die Anzahl der erfolgreich gescannten Objekte. Wenn nicht genügend Elemente vorhanden sind, wird "scanf" abgewürgt, aber "sscanf" nicht. –

+0

@WeatherVane Danke, ich wusste absolut nicht, dass die Funktionen einen Wert zurückgegeben haben. Ich habe versucht, schnell etwas zusammen zu werfen und es scheint so weit zu arbeiten. –