2016-06-03 2 views
-3

Извините, заголовок может не иметь смысла, не был уверен, что назвать его.Могу ли я нажимать пользовательский ввод из программы

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

    } 
} 

Таким образом, я могу получить nextinput, что необходимо, однако я не знаю, как передать это в следующем цикле, поскольку большинство команд принимаются от пользователя ввода команды, для этого, если заявление (если пользователь ввел определенную команду), необходимо выполнить старую команду. Я храню старые команды в истории и могу получить следующий вход, который необходим, я просто не уверен, как передать его через следующий цикл. Есть ли способ имитировать пользовательский ввод, так что fgets будет пинать nextinput или как еще я это сделаю? (Предпочли бы не 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 в то время цикла

ответ

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; 
    } 
} 
+0

Ах спасибо, так просто, полностью упустил это! –

0
char *history[10][140]; 

означает, что у вас есть двумерный массив 10 * 140, каждый элемент этого массива является не символ, а строка (char*). Вряд ли то, что вы хотели.

chr *nextinput = history[histNum]; 

вы уверены, что это chr, а не char?

Кроме того, если это действительно char *nextinput = history[histNum];, то это неправильно, так как история является 2-мерным массивом.

+0

К сожалению, да голец не CHR, однако символ * nextinput = история [histNum]; работает совершенно нормально, я просто не знаю, как его вставить в fgets (если это возможно), или как еще я буду проталкивать следующую команду через эту программу. –

+0

Вы не можете вставить его в 'fgets()'. Вам нужно реализовать логику, которая получает значение из массива history вместо вызова 'fgets()'. – Barmar

Смежные вопросы