アプリ版:「スタンプのみでお礼する」機能のリリースについて

c言語でキーボードから入力した16進数2桁の乗算表(下)をバイナリーでdatファイルに出力する方法を教えてください!
初心者すぎてあまり理解できていません。申し訳ないです。


1 2 3 4 5 6 7 8 9 A B C D E F 10
2 4 6 8 A C E 10 12 14 16 18 1A 1C 1E 20
3 6 9 C F 12 15 18 1B 1E 21 24 27 2A 2D 30
4 8 C 10 14 18 1C 20 24 28 2C 30 34 38 3C 40
5 A F 14 19 1E 23 28 2D 32 37 3C 41 46 4B 50
6 C 12 18 1E 24 2A 30 36 3C 42 48 4E 54 5A 60
7 E 15 1C 23 2A 31 38 3F 46 4D 54 5B 62 69 70
8 10 18 20 28 30 38 40 48 50 58 60 68 70 78 80
9 12 1B 24 2D 36 3F 48 51 5A 63 6C 75 7E 87 90
A 14 1E 28 32 3C 46 50 5A 64 6E 78 82 8C 96 A0
B 16 21 2C 37 42 4D 58 63 6E 79 84 8F 9A A5 B0
C 18 24 30 3C 48 54 60 6C 78 84 90 9C A8 B4 C0
D 1A 27 34 41 4E 5B 68 75 82 8F 9C A9 B6 C3 D0
E 1C 2A 38 46 54 62 70 7E 8C 9A A8 B6 C4 D2 E0
F 1E 2D 3C 4B 5A 69 78 87 96 A5 B4 C3 D2 E1 F0
10 20 30 40 50 60 70 80 90 A0 B0 C0 D0 E0 F0 100

(実際は縦、横は綺麗に揃っています)

自分が考えたプログラム
どこかでstrcat関数を使いたいと考えています。
キーボード入力は行頭にピリオドを入力したら終了するようにしています。


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

#define STEP 10000

int
main(void)
{
FILE *fp;
double *p1;
int n, ndata;
char buf[200];

int a, b, c, d, e, f, g, h, j, k, l, m, o, p, q, r, x;

while ((x = getchar() != ',')) {

fgets(buf, 200, stdin);
sscanf(buf, "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %", &a, &b, &c, &d, &e, &f, &g, &h, &j, &k, &l, &m, &o, &p, &q, &r);

}

p1 = buf;
p1 = malloc(STEP * sizeof(double));

if ((fp = fopen("NUMBERS.dat", "wb")) == NULL) {
perror("fopen");
exit(1);
}

ndata = 0;

while ((n = fread(p1 + ndata, sizeof(double), STEP, fp)) == STEP) {
ndata += STEP;
p1 = realloc(p1, (ndata + STEP) * sizeof(double));
}

ndata += n;

(この一連の操作はファイルの要素数が未知と仮定して、動的に確保した領域を少しずつ増やしていくものです。)

fwrite(p1, sizeof(double), ndata, fp);

fclose(fp);
free(p1);

return 0;
}

A 回答 (2件)

いまいちやりたい事がよくわかりませんが…。




>int a, b, c, d, e, f, g, h, j, k, l, m, o, p, q, r, x;

アルファベット1文字だけの変数名では用途が判りにくいのでやめましょう。
配列を使ってループで処理する方が良いかと思われます。

>getchar()
>fgets(buf, 200, stdin);
併用は止めておいた方がいいかも知れません。
# どちらも標準入力から…ですが……。

>p1 = realloc(p1, (ndata + STEP) * sizeof(double));

realloc()が失敗した場合、p1がどうなるのか考えてみましょう。
    • good
    • 0

なにをしたいのか, さっぱりわからない.... 「よく」わからない, というのはすごいなぁ>#1.



さておき, getchar と fgets は併用しても大丈夫. とはいえこのプログラムのように書いていると, そことは違う問題が発生しそうな気もする.

wb モードでオープンして fread はダメだろう. よしんばできたと仮定しても
何も読み込めない
はず.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!