C程序strcmp不起作用

时间:2013-12-08 10:31:22

标签: c linux unix strcmp

我对为什么输入没有正确地与“历史”进行比较感到有些困惑。无论我输入什么,它似乎永远不会进入if语句。一旦我输入历史记录,就会进入if语句。我尝试使用scanf(“%s \ n”,输入);也可以看到并且正常工作但不是我想要的方式。

while(fgets(input, sizeof(input), stdin) != NULL){

    filePrint = fopen(".simpleshell_history", "a");
    fileRead = fopen(".simpleshell_history", "r");      

    count++;
    fprintf(filePrint, "%d - %s", count, input);
    fclose(filePrint);

    if (strcmp(input,"history")==0){
        printf("%s\n", input);
        fseek(fileRead, 0, SEEK_SET);
        int x = 0;
        while ((x = fgetc(fileRead)) != EOF){
            printf("%c", x); 
        }
    }
}

2 个答案:

答案 0 :(得分:2)

当您键入“history \ n”时,fgets()会读取并存储换行符。尝试在if语句中使用strncmp(input,“history”,7)或“strcmp(input,”history \ n“)。

答案 1 :(得分:1)

fgets不会修改输入中的换行符。在使用strcmp之前,您需要自己完成这项工作。

您可以通过执行以下操作来修剪它:

input[strlen(input) - 1] = '\0';