2016-09-19 2 views
0

Я создаю две программы, которые образуют игру, и будут общаться друг с другом, где один из них по сути является пользователем, но я начинаю с построением одного и набрав себя на эту первую программу.Как взять пользовательский ввод команды различного размера и поместить его в массив

Я хочу вводить команды типа «поворот d1d2d3d4d5d6» (где di - рулоны кости), «rerolled d1d2d3d4d5d6» и т. Д., Theres - набор команд. Я хочу, чтобы моя программа называлась игроком, чтобы принимать эти команды, и они будут с ней что-то делать.

Только для начала я пытаюсь взять ввод с помощью stdin и поместить его в массив, а затем проверить массив, чтобы увидеть, действительно ли его действительная команда. Однако я не могу правильно использовать fgetc и массив. То, что я делаю в настоящее время, - это просто взять ввод, поместить в массив и распечатать его.

Я действительно не хочу, чтобы это было размером 128, я хочу, чтобы он полностью настраивался, но я не знаю, как это сделать с помощью fgets. Цикл if, чтобы проверить, не является ли его NULL, если массив пуст, но это неправильно, не уверен, что там делать.

while(1){ 
    int i = 1; 
    char* command[128]; 
    fgets(command, 128, stdin); 
    for (i=0; i < 128; i++){ 
     if (command[i] == NULL){ 
      printf("%c\n", command[i]); 
     } 
    } 

    return 0; 
} 

Так конкретно моя главная цель прямо сейчас принять такие команды, как «устранен р» от пользователя и команды становится команда = [ «устранен», «р»]

+2

Я думаю, что вы намеревались написать 'char command [128];', на первом месте. –

+0

Во-вторых, он слишком широк, поскольку он читает сейчас, не говоря уже о непонятном. Можете ли вы добавить дополнительные сведения о _actually_, на что вы нацеливаетесь? –

+1

Возможный дубликат [Как я могу прочитать строку ввода неизвестной длины?] (Http://stackoverflow.com/questions/16870485/how-can-i-read-an-input-string-of-unknown-length) – deepmax

ответ

0

пример кода:

#include <stdio.h> 
#include <string.h> 

int main(void) { 
    while(1){ 
     char command[128]; 
     if(NULL == fgets(command, sizeof command, stdin))//or use getline 
      break; 
     if(strchr(command, '\n') == NULL){//Too long 
      printf("Too long\n"); 
      while(getchar() != '\n') 
       ;//clear input 
      continue; 
     } 
     char *operation = strtok(command, " \t\n"); 
     if(operation == NULL){ 
      printf("Empty command\n"); 
      continue; 
     } 
     char *operand = strtok(NULL, " \t\n");; 
     if(operand == NULL){ 
      printf("Empty operand\n"); 
      continue; 
     } 
     printf("operation:%s\noperand:%s\n", operation, operand); 
     char *commands[] = {operation, operand}; 
     //do stuff 
    } 
    return 0; 
} 
Смежные вопросы