2016-04-16 4 views
3

Я хочу знать, почему strcasecmp() возвращает 0 в первый раз, когда я использую его, но не второй.strcasecmp не возвращается 0

В этом примере я специально вводю «привет мир» в стандартный ввод. Вместо печати 0 0 это печать 0 10. У меня есть следующий код.

#include "stdio.h" 
#include "string.h" 

int main(void) { 

    char input[1000]; 
    char *a; 

    fgets(input, 1000, stdin); 

    a = strtok(input, " "); 
    printf("%d\n",strcasecmp(a,"hello")); //returns 0 

    a = strtok(NULL, " "); 
    printf("%d\n",strcasecmp(a,"world")); //returns 10 


    return 0; 
} 

Что я делаю неправильно?

+3

Возможно 'a' будет иметь символ новой строки. Отладчик может подтвердить это –

+0

@EdHeal. Теперь я чувствую себя глупо. Большое спасибо! –

+1

Имейте в виду, что в стандарте C не существует функции, называемой 'strcasecmp()'. Для вашего тегирования необходимо указать это (например, linux). – Peter

ответ

6

Новая линия, введенная после hello world, является частью токена world, потому что вы используете пространство в качестве разделителя маркеров.

Если вы используете strtok(input, " \n"); вместо strtok(input, " ");, программа будет вести себя правильно. Фактически, вы, вероятно, хотите использовать табулятор как разделитель токенов.

Вся программа будет:

#include "stdio.h" 
#include "string.h" 

int main(void) { 

    char input[1000]; 
    char *a; 

    fgets(input, 1000, stdin); 

    a = strtok(input, " \n\t"); 
    if (a == NULL) return(-1); 
    printf("%d\n",strcasecmp(a,"hello")); 
    a = strtok(NULL, " \n\t"); 
    if (a == NULL) return(-1); 
    printf("%d\n",strcasecmp(a,"world")); 


    return 0; 
} 
Смежные вопросы