2016-06-30 2 views
1

Ich werde Buchinformationen eingeben und eine der Informationen ist der Monat und das Jahr, in dem das Buch veröffentlicht wird.Wie gebe ich zwei ganze Zahlen mit einem Bindestrich dazwischen ein?

Das Programm wird angenommen, sie mit folgendem Format zu lesen: 02-2012

die zeigt, dass 02 der Monat und 2012 ist das Jahr.

printf("Enter month and year book publish:\n"); 
scanf("%d[^-]%d",&book[i].month,&book[i].year); 

Ich versuchte es so, aber es funktioniert nicht.

+3

oder Sie können 'Scanf schreiben ("% d% c% d", & buchen [i ] .month, & tempCh, & book [i] .year); ' –

+4

Hinweis: Das Testen des Rückgabewerts von scanf ist kein Rezept für Überraschungen. – Jens

+0

Das eckige Klammer-Ding ist eigentlich ein Umwandlungs-Spezifizierer, also sollte es '% * [^ -]' sein, der Prozentsatz wird benötigt, sonst ist es eine wörtliche eckige Klammer. Der Stern unterdrückt die Zuweisung, da Sie den Bindestrich nicht beibehalten möchten. Und: Sie müssen den Rückgabewert überprüfen! – unwind

Antwort

0

Mögliche Lösung:

char temp; 
scanf("%d%c%d", &book[i].month,&temp,&book[i].year); 

Sie können später die Eingabe bestätigen die Überprüfung, ob Temp einen Bindestrich enthält.

+0

Es funktioniert jetzt! Vielen Dank! –

+1

Wenn es funktioniert, markieren Sie diese Antwort als korrekt, indem Sie dieses graue Häkchen neben der Antwort drücken. Dadurch wird das Häkchen grün und zeigt der Community, dass es Ihr Problem gelöst hat. – xenteros

+0

Diese Antwort enthält keine Validierung, die den Rückgabewert von 'scanf()' und 'temp' enthalten sollte. Siehe [@Jens] (http://stackoverflow.com/questions/38120874/how-do-i-input-to-in-tegers-with-a-dash-in-between/38128133#comment63674217_38120874) Kommentar. – chux

4

Der Trick besteht darin, die Eingabe in das gewünschte Format zu konvertieren. Dies kann durch Erzwingen des Eingabeformats über scanf erfolgen.

scanf("%d-%d", &book[i].month, &book[i].year); 

Dash zwischen den beiden% d würde verschlucken '-' vom Benutzer eingegeben.

0

Wahrscheinlich für das Sie suchen,

scanf("%d-%d,&book[i].month,&book[i].year); 

Das die - im Eingang ignoriert.

0

Verwenden "%n", um eine vollständige Analyse erkennen

printf("Enter month and year book publish:\n"); 
int n = 0; 
scanf("%d-%d%n", &book[i].month, &book[i].year, &n); 
if (n) Success(); 

Noch besser ist, verwenden fgets() statt scanf()

char buf[100]; 
fgets(buf, sizeof buf, stdin); 
int n = 0; 
sscanf(buf, "%d-%d %n", &book[i].month, &book[i].year, &n); 
// Also detects that trailing junk after the 2nd number does not exist. 
if (n && buf[n] == '\0') Success(); 
Verwandte Themen