学校の課題
Posted: 2015年1月19日(月) 17:06
以下のプログラムを作ってみたのですがコンパイルで失敗しますどうすればよいのでしょうか?
コンパイルはcygwinでやってます
[問題文]
乱数を利用した8ケタの文字列を作成せよ.仕様は以下のとおり.
(16進数0~9,A,b,C,d,F)
発生した8ケタの文字列を5行3列のデジタル文字でスクリーンに1度に5パターン表示させる.
スクリーンに表示された5つの文字列を同じくデジタル文字でファイル名「date.txt」に書き出す.
<デジタル文字の説明>
① 5 行3 列でデジタル文字のパターンを表し,それを文字数分用意した3 次元配列
num[表示する数値][文字パターンの行][文字パターンの列]
で表現
② 3 次元配列には全角スペース(“_”)で表示する部分には0,黒(“●”)で表示する部分には1を格納
③ デジタル文字のパターンのイメージ(2 の場合)は,次のとおり
num[2][0][0] = 1,num[2][0][1] = 1,num[2][0][2] = 0
num[2][1][0] = 0,num[2][1][1] = 0,num[2][1][2] = 1
num[2][2][0] = 1,num[2][2][1] = 1,num[2][2][2] = 1
num[2][3][0] = 1,num[2][3][1] = 0,num[2][3][2] = 0
num[2][4][0] = 1,num[2][4][1] = 1,num[2][4][2] = 1
3.デジタル文字パターンは用意された「moji.txt」を読み込み使用する.
4.関数が使われている
moji.txtの中身
1 1 1
1 0 1
1 0 1
1 0 1
1 1 1 などの0~9、A,b,C,d,Eの5行×3列のデジタル文字が書き込まれてます
コンパイルはcygwinでやってます
[問題文]
乱数を利用した8ケタの文字列を作成せよ.仕様は以下のとおり.
(16進数0~9,A,b,C,d,F)
発生した8ケタの文字列を5行3列のデジタル文字でスクリーンに1度に5パターン表示させる.
スクリーンに表示された5つの文字列を同じくデジタル文字でファイル名「date.txt」に書き出す.
<デジタル文字の説明>
① 5 行3 列でデジタル文字のパターンを表し,それを文字数分用意した3 次元配列
num[表示する数値][文字パターンの行][文字パターンの列]
で表現
② 3 次元配列には全角スペース(“_”)で表示する部分には0,黒(“●”)で表示する部分には1を格納
③ デジタル文字のパターンのイメージ(2 の場合)は,次のとおり
num[2][0][0] = 1,num[2][0][1] = 1,num[2][0][2] = 0
num[2][1][0] = 0,num[2][1][1] = 0,num[2][1][2] = 1
num[2][2][0] = 1,num[2][2][1] = 1,num[2][2][2] = 1
num[2][3][0] = 1,num[2][3][1] = 0,num[2][3][2] = 0
num[2][4][0] = 1,num[2][4][1] = 1,num[2][4][2] = 1
3.デジタル文字パターンは用意された「moji.txt」を読み込み使用する.
4.関数が使われている
moji.txtの中身
1 1 1
1 0 1
1 0 1
1 0 1
1 1 1 などの0~9、A,b,C,d,Eの5行×3列のデジタル文字が書き込まれてます
#include <stdio.h>
#include <stdlib.h>
int main()
{
const int base = 15;
const int height = 5;
const int width = 3;
const int outlength = 8;
const int pattern_max = 5;
int num[base][height][width], *p = num, c;
// デジタル文字パターン「moji.txt」をopenする。
FILE *fpi, *fpo;
fpi = fopen("moji.txt", "r");
if (!fpi)
{
printf("moji.txtをopen出来ません。\n");
exit(-1);
}
// デジタル文字パターンを「moji.txt」から読み込む。
while ((c = fgetc(fpi)) != EOF)
{
switch (c)
{
case '0':
*p++ = 0;
break;
case '1':
*p++ = 1;
break;
default:
break;
}
}
// 出力ファイルをopenする。
fpo = fopen("date.txt", "w");
if (!fpo)
{
printf("date.txtをopen出来ません。\n");
exit(-1);
}
// 5パターン出力する。
for (int p = 0; p < pattern_max; ++p)
{
// 乱数を利用した8ケタの文字列を作成
int buf[outlength];
for (int i = 0; i < outlength; ++i)
buf[i] = rand() % base;
for (int h = 0; h < height; ++h)
{
for (int b = 0; b < outlength; ++b)
{
for (int w = 0; w < width; ++w)
{
if (num[buf[b]][h][w])
fprintf(fpo, "●");
else
fprintf(fpo, " ");
}
fprintf(fpo, " "); // 文字間を1バイト開ける。
}
fprintf(fpo, "\n"); // 1行の終わり。
}
fprintf(fpo, "\n"); // 1パターンの終わり。
}
fclose(fpi);
fclose(fpo);
// ファイル出力内容を画面表示する。
{
char buf[1000];
fpi = fopen("date.txt", "r");
while (fgets(buf, 100, fpi))
printf("%s", buf);
}
return 0;
}