2017-08-10 1 views
-2

Ich frage mich, wie würden Sie gehen, Validierung von Benutzereingaben in c, ich brauche den Benutzer Koordinaten eingeben, eine ganze Zahl von (1-8) getrennt durch eine andere ganze Zahl von (1-8), zB "1,1". Ich fragte mich, ob ich dies entweder mit strtok() oder strtol() tun könnte?Wie validiere ich Benutzereingaben in c?

Antwort

1

Wenn das Eingabeformat festgelegt ist, ist es viel einfacher fgets() zu verwenden, um eine Eingabezeile zu bekommen und dann sscanf() die Eingabe zu analysieren als strtok() und strtol() zu verwenden.

Hier ist ein Beispiel, das bestätigt, dass der Benutzer zwei Ganzzahlen im Bereich [1, 8] eingibt. Wenn der Benutzer weniger als zwei Werte eingibt oder wenn die Werte außerhalb des Bereichs liegen oder wenn nach den akzeptierten Werten eine zusätzliche Eingabe erfolgt, wird der Benutzer aufgefordert, ein anderes Koordinatenpaar einzugeben.

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    char buffer[100]; 
    int x, y; 

    /* sscanf() method: input must be comma-separated, with optional spaces */ 
    printf("Enter a pair of coordinates (x, y): "); 
    if (fgets(buffer, sizeof buffer, stdin) == NULL) { 
     perror("Input error"); 
     exit(EXIT_FAILURE); 
    } 

    int ret_val; 
    char end; 
    while ((ret_val = sscanf(buffer, "%d , %d%c", &x, &y, &end)) != 3 
      || x < 1 
      || x > 8 
      || y < 1 
      || y > 8 
      || end != '\n') { 
     printf("Please enter two coordinates (x, y) in the range [1, 8]: "); 
     if (fgets(buffer, sizeof buffer, stdin) == NULL) { 
      perror("Input error"); 
      exit(EXIT_FAILURE); 
     } 
    } 

    printf("You entered (%d, %d).\n", x, y); 

    return 0; 
} 
+0

Vielen Dank –