2014-01-29 3 views
-2

я должен сравнить 2 строки, один из файла, и один из пользовательского ввода, вот файл:C: Сравнение 2 Струны

Password 
abcdefg 
Star_wars 
jedi 
Weapon 
Planet 
long 
nail 
car 
fast 
cover 
machine 
My_little 
Alone 
Love 
Ghast 

Код для получения строки из линии штраф но код для сравнения 2 строк не дает правый выход

int main(void){ 
    int loop, line; 
    char str[512]; 
    char string[512]; 
    FILE *fd = fopen("Student Passwords.txt", "r"); 
    if (fd == NULL) { 
    printf("Failed to open file\n"); 
    return -1; 
    } 
    printf("Enter the string: "); 
    scanf("%s",string); 
    printf("Enter the line number to read : "); 
    scanf("%d", &line); 

    for(loop = 0;loop<line;++loop){ 
    fgets(str, sizeof(str), fd); 
    } 
    printf("\nLine %d: %s\n", line, str); 

    if(strcmp(string,str) == 0){ 
    printf("Match"); 
    }else{ 
    printf("No Match"); 
    } 
    fclose(fd); 
    getch(); 
    return 0; 
} 

возможно НТР сбросы, но я не знаю, возможно, некоторые из талантливых программистов, здесь можно увидеть проблему.

Кто-нибудь знает, что не так с моим сопоставлением строк?

Правильный выход: Вход: джедай, 4 Выход: матч

редактирования: Обе строки одинаковы, в том же случае редактирование: dreamlax исправил.

+0

Что означает добавление тега структуры ?? – vinayawsm

+1

Итак, вы имеете в виду, что 'str' является' jedi' и 'string' является' Jedi'? И «strcmp» «не работает»? –

+0

@invalid_id Возможно, это имеет значение? – user3227362

ответ

6

fgets() не отбрасывает символ новой строки после считывания, поэтому он будет частью str, что приведет к сбою сравнения, поскольку string не будет иметь символ новой строки. Чтобы обойти это, вам просто нужно удалить символ новой строки из str.

str[strlen(str) - 1] = '\0'; 
if (strcmp(string, str) == 0) 
    // ... 

В идеале, убедитесь, что strlen(str) > 0 первым, в противном случае вы будете ссылаться на неопределенное поведение.

+0

Спасибо, это работает, выход правильный, когда прошло 6 минут, я с радостью приму ответ – user3227362

+0

@ user3227362: Не стоит беспокоиться, это особое свойство 'fgets' сбило меня с толку раньше. – dreamlax

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