我可以从程序中推送用户输入吗?

时间:2016-06-03 20:50:24

标签: c

对不起,标题可能没什么意义,不知道该命名是什么。

//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循环

2 个答案:

答案 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;
    }
}