Я немного усердно занимался этой проблемой, и мне интересно, сможет ли кто-нибудь понять, что я делаю неправильно. Я читаю пользовательский ввод из stdin, разбиваю строку, которую они вводят через strtok (), и сохраняю ее в массив char *. Массив char * определяется вне цикла while.
Итак: пользователь вводит данные через stdin, а массив заполняется строками с каждым словом из команды.
Дело в том, что если пользователь просто нажимает Enter, я хочу, чтобы массив ОБЕСПЕЧИЛ, что это значение! Я хочу, чтобы в массиве остались одни и те же значения ... чтобы я мог выполнить ту же команду. Похоже, что цикл while очищает мой массив символов char *. Вот код:
char *commands[3];
char *result = NULL;
char delims[] = " "; //a space AND a tab!
while (1) {
printf(PROMPT);
//Gathers user input!
char *input;
char stuff[230];
input = fgets(stuff, 230, stdin);
printf("input has length %i\n", strlen(input));
int helper = strlen(input);
int i = 0;
result = strtok(input, delims);
printf("helper has length %i\n", helper);
printf("commands[0] CHECK 1:%s", commands[0]);
if (helper >1)
{
while( result != NULL)
{
printf("while gets hit!\n");
if (i < 4)
{
commands[i] = result;
result = strtok(NULL, delims );
i++;
}
}
}
printf("commands[0] is CHECK 2:%s", commands[0]);
if (strncmp(commands[0], "step", 4) == 0)
{
lc3_step_one(p);
}
printf("commands[0] is CHECK 3:%s", commands[0]);
}
CHECK 1, CHECK 2 и CHECK 3 в printf ничего не печатают, если пользователь нажимает ввод. В случае, если они в последний раз набрали «step», я хочу, чтобы «step» оставался в массиве и, таким образом, выполнялся снова!