对不起,标题可能没什么意义,不知道该命名是什么。
//history of the 10 previous commands
char *history[10][140];
while (1) {
printf("Enter command:");
fgets(input, MAX, stdin);
//Handle other commands
//true if user entered command to call previous command
if(thisIsTrue){
//strToInt gets number from the user input
int histNum = strToInt(input);
char *nextinput = history[histNum];
//Not sure what to do here
}
}
所以,我能够获得所需的下一个输入,但是我不知道如何将其传递到下一个循环,因为大多数命令来自用户输入命令,对于此if语句(如果用户输入特定命令)需要执行旧命令。我将旧命令存储在历史记录中并能够获得所需的下一个输入,我只是不确定如何将它传递到下一个循环。有没有办法模拟用户输入,以便fgets将接收下一个输入或我将如何做到这一点? (宁愿不在if语句中对所有(//处理其他命令)进行copypaste。
Example of program running:
Enter command:command1
Enter command:command2
Enter command:command3
Enter command:command4
Enter command:command5
Enter command:command6
Enter command:command7
Enter command:command8
Enter command:command9
Enter command:command10
Enter command:command11
Enter command:command1
Enter command:hlist
4 command4
5 command5
6 command6
7 command7
8 command8
9 command9
10 command10
11 command11
12 command1
13 hlist
Enter command:!11
command11 //this is the value of new_input
我只是不知道如何将command11推入while循环
答案 0 :(得分:0)
char *history[10][140];
表示你有一个二维数组10 * 140,该数组的每个元素都不是一个字符而是一个字符串(char*
)。几乎没有你想要的。
chr *nextinput = history[histNum];
您确定它是chr
而不是char
吗?
此外,如果它确实是char *nextinput = history[histNum];
,那么它是错误的,因为历史是一个二维数组。
答案 1 :(得分:0)
如果我理解你的要求,它必须是这样的:
char *history[rows][columns];
int user_has_requested_previous_command_flag = 0;
while(1)
{
switch(user_has_requested_previous_command_flag)
{
case 0:
printf("Enter command:");
fgets(input, MAX, stdin);
//Handle other commands
if(thisIsTrue)
{
//strToInt gets number from the user input
int histNum = strToInt(input);
input = history[histNum];
user_has_requested_previous_command_flag = 1; // !!!!!!!!!
}
break;
case 1:
// Do whatever you need to do here with the previous input from the history
user_has_requested_previous_command_flag = 0;
break;
}
}