2017-11-29 16 views
0

はまた、ユーザが同じヘキサを挿入した場合、ユーザーが入力しない値より高い15 は再びそれが「ループ」防止ユーザー

int matrixArray[4][4], i, j, rowsum, columnsum, diagonalsum; 


printf("Skriv in 16 olika värden för din 4 x 4 kvadrat: "); // asks user to insert 16 numbers to see if its a magicsquare 

for (i = 0; i < 4; i++) { 
     for (j = 0; j < 4; j++) { 
      scanf_s("%x", &matrixArray[i][j]); // inserts values into the array 

      } 
     } 
+0

を探すために読んで以前の値を使用しますかエラー? – zuif

+0

許容される最小値は何ですか? 0の場合、16番目の入力を要求する必要はありません。 – chux

答えて

0
を再起動しますすることができます条件を必要とします

私は、ユーザーがすでに入力した数値の0/1のフラグを格納し、「見た」の数字の配列を定義したい、

int seen[16]; // initialize with 0 

のようなものはその後、毎回scanf_sはあなたの最も最近の入力(レッツを与えますそれを簡潔さのためにinと呼ぶ)、y seen[in] == 0かどうか確認してください。そうであれば、matrixArrayに番号を格納し、seen[in] = 1と設定して続行してください。そうでない場合、ユーザーは2回入力しました。入力を破棄し、良いエラーメッセージを出して続行してください。これはループwhileで実行できます。

擬似コード

ok = false 
for i = 1..4 { 
    for j = 1..4 { 
    while (not ok) { 
     in = scanf() 
     if (not 1 <= in <= 16) 
     error("input must be between 1 and 16; try again") 
     continue 

     if seen[in] == 1 
     error("you already entered that number; try again") 
     continue 
     else 
     matrixArray[i][j] = in 
     seen[in] = 1 
     ok = true 
    } 
    } 
} 
+0

答えてくれてありがとう、私はあなたが言ったことをしようとしてきましたが、それを実現する方法をまだ理解できません。あなたはもう少し詳細な方法でそれを書くことができます...ありがとう、私はCの新しい: – Marcus

+0

私はいくつかの擬似コードを追加しました。試してみて、Cで実装してください! – Pavel

0

問題は何ですか?重複

#define ROW 4 
#define COL 4 
int total = ROW*COL; 
printf("Skriv in %d olika värden för din %d x %d kvadrat: ", total, ROW, COL); 
for (int i = 0; i < total; i++) { 
    bool duplicate; 
    do { 
    duplicate = false; 
    unsigned value; 
    if (scanf_s("%x", &value) != 1) { 
     printf("Numeric data not entered\n"); 
     exit(-1); 
    } 
    for (int k = 0; k < i; k++) { // look through prior values 
     int r2 = k/COL; 
     int c2 = k%COL; 
     if (value == matrixArray[r2][c2]) { 
     duplicate = true; 
     printf("Duplicate\n"); 
     break; 
     } 
    } 
    } while (duplicate); // reject recent entry and try again. 
    int r = i/COL; 
    int c = i%COL; 
    matrixArray[r][c] = value; 
}