ページ 11

学校の課題に関して

Posted: 2018年7月11日(水) 18:59
by meru77
現在C言語を学んでいる学生です。
プログラミングに関しては初歩的なことしかできません。
C言語について学ぶ講義の課題で、

100x100の要素を持つ整数型2次元配列を生成し、各要素にランダムな整数値を代入する。
ランダムな整数値をrand()関数を使って、生成すること。生成した値を配列の各要素に代入する。乱数値の範囲は0~10までとする。
生成したデータをCSV形式でファイル出力し、Excel上で視覚的(色)で結果を確認して提出せよ。

というものが出されました。
自力で取り組んでみたのですが、どうしてもうまくいきません。具体的には、Excelファイルに1列1万行のものができてしまいます…
Windowsで、VisualStudio Professional2013を利用しています。
提出は明日の13時なので、ご教授いただければありがたいです。

コード:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	int base[100][100];
	int i,j;
	int r;

	FILE *fp;

	fp = fopen("base.csv", "w");

	if ((fp = fopen("base.csv", "w")) == NULL){
		printf("ファイルオープンに失敗しました。\n");
		exit(1);
	}

	for (i = 0; i < 100; i++){
		for (j = 0; j < 100; j++){
			fprintf(fp, "%d,\n", rand() % (10 + 1), base[100][100] );
		}
	}

	fclose(fp);

	return 0;
}

Re: 学校の課題に関して

Posted: 2018年7月11日(水) 19:21
by usao
> 生成した値を配列の各要素に代入する。

と指定されているので,代入作業を行う必要があるように思います.


> 1列1万行

になるのは,出力時に1万回改行しているからでしょう.
所望の形になるように,必要な箇所にのみ改行を入れるとよいのではないでしょうか.

Re: 学校の課題に関して

Posted: 2018年7月11日(水) 23:22
by みけCAT
・fopenを無駄に2回している
・範囲外のbase[100][100]の値を読んでいる
という問題点もありますね。

(fprintfの書式に対して引数が多すぎること自体は、多すぎる引数が無視されるだけで無害です)