2017-02-22 4 views
0

ユーザー入力がfgetsを使用するプログラムがありますが、入力にスペースがあると不安定に見えます。私はスペースを入れずに、動作しているようです比較するとループ中にユーザー入力が分割される

だから私入力ファイル1と、その後は、エンターキーを押したときに、これは出力

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

です。

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

初期化されていない変数に対して 'ValidateFilename()'を呼び出すことは未定義の動作です。また、 'printf(filename)'に '\ n'を追加すると便利です。 – John3136

+1

(ValidateFileName(fileName)!= 0); ' – bruceg

+0

@ John3136の中には、その起源のために' '\ n ''があります(' fgets'は通常、 )。これは問題となる可能性があります。 – Sebivor

答えて

0

"ファイル1"と "ファイル1 \ n"を比較しています。次のようにstrcmp呼び出しをstrncmp呼び出しに変更します。(strncmp(fileName, "File 1", strlen("File 1")) == 0)

+1

非常に堅牢な解決策ではありません。どうすれば "File 11"になるのですか?問題の一部(コメント参照)は、ある文字列にあるが他の文字列にはない '\ n'文字です。 – John3136

+0

私はそれが堅牢だと思いますが、拡張はできません。 :)末尾の '\ n'を取り除くには' chomp'スタイルの関数を実装する方が良いでしょうが、これはOPのための最も速い解決策だと思いました。 – bruceg

関連する問題