2017-02-22 5 views
0

aufgeteilt Ich habe ein Programm, das Benutzereingabe mit fgets erhält, aber wenn der Eingang Leerzeichen hat, scheint es unberechenbar zu sein.Benutzereingabe ist für While-Schleife

Also, wenn ich Eingabedatei 1 und dann die Enter-Taste drücken, dann ist dies der Ausgang

`FilePlease enter your file Name` 
`1Please enter your file Name` 

Wenn ich ohne Leerzeichen vergleichen, es scheint zu funktionieren.

int MAX_NAME_SZ = 256; 
char * fileName = malloc (MAX_NAME_SZ); 

while (ValidateFileName(fileName) != 0) 
{ 
    printf("Please enter your file Name\n"); 
    fgets (fileName, MAX_NAME_SZ, stdin); 
} 

int ValidateFileName(char * fileName) 
{ 
    printf(fileName); 
    if ((strcmp(fileName, "File 1") == 0) || (strcmp(fileName, "File 2") == 0) || 
     (strcmp(fileName, "File 3") == 0) || (strcmp(fileName, "File 4") == 0) || 
     (strcmp(fileName, "File 5") == 0)) 
     return 0; 
    else 
     return 1; 
} 
+1

Aufruf von 'ValidateFilename()' auf einer nicht initialisierten Variable ist undefiniertes Verhalten. Auch das Hinzufügen von '\ n' zum' printf (filename) 'könnte nützlich sein. – John3136

+1

Sie wahrscheinlich tun möchten "do {...} while (ValidateFileName (fileName)! = 0);' – bruceg

+0

@ John3136, es gibt ein ''\ n'' in diesem wegen seiner Herkunft (' fgets' typischerweise fügt das ein). Dies könnte ein Problem sein. – Sebivor

Antwort

0

Sie vergleichen "Datei 1" mit "Datei 1 \ n". Ändern Sie Ihre strcmp Aufrufe an strncmp Aufrufe, wie folgt: (strncmp(fileName, "File 1", strlen("File 1")) == 0)

+1

Keine sehr robuste Lösung. Wie wäre es wenn wir zu "File 11" kommen? Ein Teil des Problems (siehe Kommentare) sind die '\ n' Zeichen, die in einer Zeichenfolge sind, aber nicht in der anderen. – John3136

+0

Ich denke, es ist robust, aber nicht erweiterbar. :) Es wäre besser, eine "chomp" -Stil-Funktion zu implementieren, um das nachgestellte '\ n' loszuwerden, aber ich dachte, dies wäre die schnellste Lösung für das OP. – bruceg