2013-11-23 5 views
0

Я пробую что-то очень простое; сравнивая введенную пользователем строку с «привет», но strcmp не хочет работать. Я знаю, что мне не хватает чего-то очевидного, и я думаю, что это связано с тем, как я объявил свою строку. Вся помощь очень ценится.Я не могу заставить strcmp работать правильно

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

int main (void) 
{ 
    char command[4555], compare[] = "hello"; 
    fgets (command, sizeof (command), stdin); 
    printf ("%s\n%s\n", command, compare); 
    if (strcmp (command, compare) == 0) 
    { 
     printf ("The strings are equal"); 
    } else { 
     printf ("The strings are not equal"); 
    } 
} 
+0

Распечатка перед тестом уже говорит вам, в чем проблема. Почему он печатает пустую строку? – Mat

+0

Должно было сделать еще немного отладки. Спасибо. – user2929779

ответ

3

fgets оставит символ новой строки в буфере, а затем Null прекратить, пока команда не будет иметь новую строку и просто быть нулем.

+0

А я вижу. Спасибо. – user2929779

1

С помощью fgets вы добавляете '\ n' перед '\ 0' в своей строке. помощью:

if(command[strlen(command)-1]=='\n') 
    command[strlen(command)-1]='\0'; 

Вы удалите его и эффективно сравнить строки

+0

Еще лучше было бы вызвать 'strlen (command)' once и использовать его результат, который хранится в переменной, дважды. – glglgl

1

Ну, просто добавить что-то, да fgets добавляет «\ п» символ в строке ввода.

Итак, лучше использовать функцию strncmp, которая также находится в той же библиотеке.

strncmp (команда, сравнение, strlen (команда) -1).

Он отлично работает.

Смежные вопросы