我现在正在努力解决这个问题 2 天,但似乎没有任何效果!我正在用 C 语言制作一个 shell,我正在尝试实现历史命令(它将保留用户给出的所有命令的历史记录)。这是我的代码的简化版本(删除了不必要的代码和函数)。
#include <stdio.h>
#include <string.h>
int main()
{
int doLoop = 1;
int i=0;
int c=0;
char givenCommand[100];
char *history[20];
char *newlinePos; /* pointer to the '\n' character in the input C string */
/* Print the header */
printf("Operating Systems Shell (Fall 2013)\n");
printf("Iacovos Hadjicosti\n");
printf("\n");
while(doLoop==1) /* Check if it should do the loop again */
{
printf("CSC327>"); /* Print a new prompt line */
fgets(givenCommand, sizeof(givenCommand), stdin); /* get input */
newlinePos = strchr(givenCommand,'\n'); /* point newlinePos to the '\n' character */
if(newlinePos!=NULL)
{
*newlinePos = '\0'; /* replace it with the null character */
}
if(strcmp(givenCommand,"exit")==0)
{
doLoop = 0; /* Do not do the loop again */
}
else if(strcmp(givenCommand,"history")==0)
{
for(i=0; i<c; i++)
{
printf("%d. %s\n", i+1, history[i]);
}
}
else
{
if(strcmp(givenCommand,"")!=0) /* if input was not empty.. */
{
printf("Command not found!\n"); /* show wrong command message */
}
}
history[c] = givenCommand;
c++;
}
return 0;
}
这获取输入,将其放入 givenCommand,检查它是哪个命令,然后将其放入历史数组中。当用户给出“历史”命令时,它应该打印历史数组中的所有命令。相反,它只打印给出的最后一条命令,c 次(c 是给出的命令总数)。
例如,如果用户输入“Test1”,然后第二次输入“Test2”,当他第三次输入“history”时,将输出以下内容:
1.测试2
2.测试2
任何意见如何解决这个问题?(我是用TCC编译的)