無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
galilei

無題

#1

投稿記事 by galilei » 16年前

初心者です。
すいません。宿題なんですけど、色々やっても動きません。
何処を改善すればいいかお願いします。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h> /*strcat関数で必要 */

int main()
{
srand((unsigned) time(NULL)); /* 乱数系列の変更 */
int i, j;
FILE *fp;
char bun[256], file[33][30];

fp = fopen("test2.txt", "r"); /* ここにファイル名を入れる */

if(fp == NULL) {
perror("ファイルをオープンできません\n");
return -1;
}

i = 0;
while(fscanf(fp, "%s", &file[0]) != EOF) {
i++;
}
fclose(fp);

fp = fopen("test3.txt", "w"); /* ここに書き込むファイルの名前を入れる */
if(fp == NULL) {
perror("ファイルをオープンできません\n");
return -1;
}

j = 0;

while(j < 20) {
i = 0;

i = rand()%11;
strcpy(bun, &file[0]);
strcat(bun, "は");
i += (12 - i);
i += rand()%9;
strcat(bun, &file[0]);
i += (22 - i);
i += rand()%10;
strcat(bun, &file[0]);
strcat(bun, "\n");
fprintf(fp, bun);
j++;
}
fclose(fp);

return 0;
}

初級者

Re:無題

#2

投稿記事 by 初級者 » 16年前

どんな結果を得るのが正しくて、
実際にはどんな結果を得てしまうのでしょうか?

toyo

Re:無題

#3

投稿記事 by toyo » 16年前

勘違いしてそうな場所
i = rand()%11;
// i は 0-10(0-11ではありません)
i += (12 - i);
// これはまとめると i = 12 になります
i += rand()%9;
// i は 12-20
i += (22 - i);
// これも i = 22 のことです
i += rand()%10;
// i は 22-31

これではfile[ 11 ]とfile[ 21 ] と file[ 32 ]は選択されません
i = rand()%12;
    strcpy(bun, &file[0]);
    strcat(bun, "は");
    i = 12 + rand()%10;
    strcat(bun, &file[0]);
    i = 22 + rand()%11;
    strcat(bun, &file[0]);
    strcat(bun, "\n");
    fprintf(fp, bun);

がやりたいことだと考えましたが

閉鎖

“C言語何でも質問掲示板” へ戻る