2017-01-08 9 views
0

NxNサイズの行列(Nは2〜10の数)があり、チェスの部分を置くことができます。 1つのフィールドを1つだけ入れることができます。プログラムはテーブルのサイズを求めて、このようなチェスの位置を求めます。
1ピース:B2
2ピース:C5
3ピース:D2
...
ユーザが「X」を入力して、ループから出ることができる最後のピースの後。複数の値をスキャンして配列に追加する方法は?

私の問題は、私はこのように1列にすべてのデータを置く必要があるということです。

char position[100] = {B2C5D2} 

は、これは私が使用しようとした関数にコードです:

char inputPosition(char position[]) { 
    int i = 0; 
    do { 
     printf("%d. piece: ", i+1); 
     scanf("%s", &position[i]); 
     i++; 
    }while(position[i-1]!='x'); 
    return position; 
} 

出力ルックスこのように:

BCDx 

(B2C5D2のために)私はscanf関数を使用すべきかわからないとプログラムは、valのを取得するべきではありませんue xをパラメータとして使うが、私は何をすべきか分からない。

編集:私の例では、位置が有効かどうかは関係ありません。また、char位置の最大入力を編集しました。 (私が使用しなければならない最大の変数は約10です)私の本当の問題は、スペースなしですべての位置[i]を1つの配列に入れることができないことです。

+1

あなたが読む必要はありません'&position [2 * i]'に移動しますか?また、 '%s'の代わりに' '%2c" 'を使わない限り、20文字の配列に9つの位置しか格納できません。あなたはまだ位置のための10対の文字でヌル終端の文字列を持っていないでしょう。あなたはポジションが有効であることもチェックしていません。 –

答えて

2

配列内の位置をオフセットする必要がありますので、scanf()の引数として&position[2*i]を使用してください。

配列の大きさをコードに伝え、その配列をオーバーフローさせないようにする(末尾を索引付けするか、合うよりも多くの文字を受け入れる)ことをお勧めします。

一つの可能​​な解決策は、次のとおりです。

#include <stdio.h> 

static void inputPosition(int pos_size, char position[pos_size]) 
{ 
    for (int i = 0; i < pos_size/2; i++) 
    { 
     printf("%d. piece: ", i + 1); 
     scanf("%2s", &position[2 * i]); 
     if (position[2 * i] == 'x') 
     { 
      position[2 * i] = '\0'; 
      break; 
     } 
    } 
} 

int main(void) 
{ 
    char position[21]; 

    inputPosition(sizeof(position), position); 
    printf("Position: [%s]\n", position); 
    return 0; 
} 

とサンプルの実行利回り:

1. piece: B2 
2. piece: C5 
3. piece: D2 
4. piece: A1 
5. piece: E3 
6. piece: F8 
7. piece: H8 
8. piece: A3 
9. piece: D4 
10. piece: E2 
Position: [B2C5D2A1E3F8H8A3D4E2] 

早期終了に伴う他のサンプル実行は、次のとおりです。

1. piece: B2 
2. piece: C5 
3. piece: D2 
4. piece: x 
Position: [B2C5D2] 
+0

ありがとうジョナサンあなたは本当に私を助けました! – 2b1c

関連する問題