while文の動作が毎回ちがい、間違いがわかりません。
Posted: 2012年9月27日(木) 14:55
いぜんは2度、お世話になりました。(御礼の返答をきちんとしていないトピックがございます。失礼しました。)
またよろしくお願いします。次のコードを作ったのですが、毎回反応が違うのです。
目標)
str[][16]に格納した単語を、str2[][]にランダムに格納しなおす。
例)
char str[][16] = {"abcd", "efghi","jklm","nopq","rstu","vwx","yz","dd","feafe","feaf"};
→char str2[10][16] = { "nopq","abcd","rstu","vwx","jklm","yz","dd","feafe","efghi","feaf"};
現状)
i = 9になると、だいたい次のような結果を表示して終わってしまう。
start
i = 9 : j = 0 : x = 9 for
i = 9 : j = 1 : x = 9 for
i = 9 : j = 2 : x = 9 for
i = 9 : j = 3 : x = 9 for
i = 9 : j = 4 : x = 9 for
i = 9 : j = 5 : x = 9 for
i = 9 : j = 6 : x = 9 for
i = 9 :Program ended with exit code: 0
たまに for構文を抜けて、配列str2の表示(最後のfor構文です)に到達するが、????となっている。
質問)
毎回出力結果が違うのは何が原因でしょうか?
追加の質問)
またよろしければ、二次元配列を別の二次元配列に入れ替えるのは最下段のfor構文であってるでしょうか?別のmain関数内で試しましたが、うまくいってなんです。
恐縮ですがよろしくお願いします。
またよろしくお願いします。次のコードを作ったのですが、毎回反応が違うのです。
目標)
str[][16]に格納した単語を、str2[][]にランダムに格納しなおす。
例)
char str[][16] = {"abcd", "efghi","jklm","nopq","rstu","vwx","yz","dd","feafe","feaf"};
→char str2[10][16] = { "nopq","abcd","rstu","vwx","jklm","yz","dd","feafe","efghi","feaf"};
現状)
i = 9になると、だいたい次のような結果を表示して終わってしまう。
start
i = 9 : j = 0 : x = 9 for
i = 9 : j = 1 : x = 9 for
i = 9 : j = 2 : x = 9 for
i = 9 : j = 3 : x = 9 for
i = 9 : j = 4 : x = 9 for
i = 9 : j = 5 : x = 9 for
i = 9 : j = 6 : x = 9 for
i = 9 :Program ended with exit code: 0
たまに for構文を抜けて、配列str2の表示(最後のfor構文です)に到達するが、????となっている。
質問)
毎回出力結果が違うのは何が原因でしょうか?
追加の質問)
またよろしければ、二次元配列を別の二次元配列に入れ替えるのは最下段のfor構文であってるでしょうか?別のmain関数内で試しましたが、うまくいってなんです。
恐縮ですがよろしくお願いします。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main (void)
{
char str[][16] = {"abcd", "efghi","jklm","nopq","rstu","vwx","yz","dd","feafe","feaf"};
char str2[10][16];
int k = (unsigned)(sizeof(str) / sizeof(str[0]));
int num[k];
printf("%d \n", k);
for (int i = 0; i < k ; i++) {
int j;
int x = 0;
srand((unsigned)time(NULL));
do{
printf("start\n");
j = 0;
x = rand() % k ;
for (;j <= i; j++) {
printf(" i = %d : j = %d : x = %d for\n", i, j, x); //ここが表示されています。
if (i == 0 && x == 0) {
num[i] = x;
break;
}
if (num[j] == x) {
printf("break x = num [%d] = %d \n ", j, num[j]);
break;
}
}
printf(" i = %d : j = %d : x = %d : k = %d for\n", i, j, x, k);//
}while (j < i);
num[i] = x;
printf("----------------------------------------------OK!num[%d] = %d\n", i, x);
}
for (int i = 0; i < k; i++) {
printf("num[%d] = %d\n", i, num[i]);
}
//------------------------ 以下はたまに表示されるが????が並んでいるだけが多いです。
printf("ならべかえ\n");
for (int i = 0; i <= k; i++) {
for (int j = 0; str[i][j] != '\0'; j++) {
printf("%c", str2[i][j]);
}
printf("\n");
}
}