2010-12-15 3 views
0

Hiya, ich versuche, eine kleine Schleife zu machen, die einen Fehler darstellt, wenn der Benutzer etwas abgesehen von einem Schwimmer eingibt und ihnen eine weitere Möglichkeit gibt. Hier ist, was ich bisher habe.Versucht, Benutzereingabefehler in C

printf("Enter a value for x: "); 
while (scanf("%lf", &x_temp) != 1) { 
    printf("ERROR: Input real number\n"); 
    printf("Enter a value for x: "); 
    scanf("%lf", &x_temp); 
} 

Aber das ist nur die Schleife durchläuft, ohne dass der Benutzer eine weitere Chance zu geben, eine andere Nummer eingeben:

[email protected]:~/Desktop/Exercise_0$ ./a.out 
Enter a value for x: a 
ERROR: Input real number 
Enter a value for x: ERROR: Input real number 
Enter a value for x: ERROR: Input real number 
Enter a value for x: ERROR: Input real number 
Enter a value for x: ERROR: Input real number 
Enter a value for x: ERROR: Input real number 
Enter a value for x: ERROR: Input real number 
Enter a value for x: ERROR: Input real number 
Enter a value for x: ERROR: Input real number 

Wer irgendwelche Ideen hat? Prost Jungs

Antwort

1

Try this:

for (;;) 
{ 
    printf("Enter a value for x: "); 
    if (scanf("%lf", &x_temp) == 1) 
     break; 
    printf("ERROR: Input real number\n"); 
} 
+0

Dies funktioniert, aber Sie haben den Wert zweimal aus irgendeinem Grund Eingang hmmm Prost – JMzance

1

Sie verwenden nicht den Rückgabewert der zweiten scanf Anruf irgendwo. So ist es wahrscheinlich erfolgreich, aber dann tun Sie sofort eine andere scanf an der Spitze der Schleife, nachdem die Eingabe bereits verbraucht wurde.

0

Ich bin mir nicht sicher, was das Verhalten ist, aber es scheint, Sie haben eine zusätzliche scanf(). Derjenige, der Teil der while-Bedingung ist, wird jedes Mal durch die Schleife wiederholt. Ich sehe keine Notwendigkeit für die zweite am Ende der Schleife.

Verwandte Themen