2016-09-19 4 views
0

私はゲームを形成する2つのプログラムを作成しており、それらのうちの1つが本質的にユーザーであるが、私は開始している最初のプログラムに自分自身を入力してビルドしてください。さまざまなサイズのユーザーコマンド入力を受け取り、それを配列に入れる方法

「turn d1d2d3d4d5d6」(ここでdiはダイスロール)、「rerolled d1d2d3d4d5d6」などのコマンドを入力したい場合は、一連のコマンドが必要です。プレイヤーと呼ばれる私のプログラムでこれらのコマンドを実行したいと思っています。

ちょうど私はstdinを使用して入力を受け取り、それを配列に入れようとしていますが、配列をチェックして有効なコマンドがあるかどうかを確認しようとしています。しかし、私はfgetcと配列を正しく使用することはできません。私が現在やっていることは、入力を受け取り、配列に入れて印刷することです。

私はそれが128サイズの配列であることを実際には望んでいませんが、私はそれを完全に調整可能にしたいと思いますが、私はfgetsでこれを行う方法を知らない。配列が空であるがそれが間違っているかどうかを調べるためのNULLがあるかどうかを調べるifループ。そこに何を置くべきかわからない。だから、今の私の主な目標は具体的には

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

[「排除」、「P」] =コマンドとなり、ユーザおよびコマンドからのこのような「排除P」のようなコマンドを取ることである

+2

私はあなたが 'char command [128];'と書いていたと思います。 –

+0

第二に、それはあまりにも広すぎます。目標を達成するために実際に何か詳細を追加できますか? –

+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; 
} 
関連する問題