我对为什么输入没有正确地与“历史”进行比较感到有些困惑。无论我输入什么,它似乎永远不会进入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);
}
}
}
答案 0 :(得分:2)
当您键入“history \ n”时,fgets()会读取并存储换行符。尝试在if语句中使用strncmp(input,“history”,7)或“strcmp(input,”history \ n“)。
答案 1 :(得分:1)
fgets不会修改输入中的换行符。在使用strcmp之前,您需要自己完成这项工作。
您可以通过执行以下操作来修剪它:
input[strlen(input) - 1] = '\0';