

No.2ベストアンサー
- 回答日時:
#include <stdio.h>
#include <stdlib.h>
const static int BUF = 10;
const static int MAX = 256;
void num_count(FILE* p_file , int* counter);
int main(void)
{
FILE* input = fopen("random.txt","r");
if (input == NULL)
{
fprintf(stderr , "fopen failed.");
exit(1);
}
int counter[MAX];
int i;
for(i=0 ; i<MAX ; i++)
{
counter[i] = 0;
}
num_count(input , counter);
for(i=0 ; i<MAX ; i++)
{
printf("%d -> %d\n" , i , counter[i]);
}
fclose(input);
return 0;
}
void num_count(FILE* p_file , int* counter)
{
char buf[BUF];
while (fgets(buf , BUF , p_file) != NULL)
{
int n;
sscanf(buf , "%d" , &n);
counter[n]++;
}
}
1行につき、1つの数字と仮定してコーディングしてみました。
手元では正しく動いているように思えましたが、
ご自分で確認してください。
この回答への補足
回答ありがとうございました。
分からないところがありまして、
#define BUF 10の意味や、buf,BUFの意味、
void count以降の動作が分かりません。
(このソースはこういう動作をするためってことです)
教えていただけないでしょうか?
よろしくお願いします。

No.3
- 回答日時:
1.const int BUF = 10;
char buf[BUF];
fgetsは指定のファイルから1行ずつ読み込みます。
bufは読み込んだ行を蓄えておくための領域です。
(そのため、「バッファ」と言う意味で、bufと宣言しています。)
BUFはその領域のサイズです。
1行につき数字1つ、しかも0~255の範囲ならば、
10文字分もあれば十分だろうと考え、
このように宣言しました。
2.
// FILE* p_file ファイルポインタ
// 入力ファイルを指定します。
// あらかじめ、適切な処理で開かれているものとします。
// counter カウンタ用配列
// 数字をカウントするための配列
// counter[k]が数字kの出現回数を記録します。
// こちらも、あらかじめ適切な配列が確保されているとします。
void num_count(FILE* p_file , int* counter)
{
// 1.で述べたとおり、入力行を蓄えるためのバッファ
char buf[BUF];
// fgetsにより、1行ずつファイルから読み込みます。
while (fgets(buf , BUF , p_file) != NULL)
{
int n;
// 入力行はbufに入っているため、sscanfを用いて
// 数字を読み取り、変数nに格納します。
sscanf(buf , "%d" , &n);
// 読み取った数字のカウンタを1増やします。
// 本来ならば、nが適切な範囲に収まっているか、
// チェックすべき所ですね。
counter[n]++;
}
}
No.1
- 回答日時:
この質問の仕方だと何が分からないのか僕らも分かりません
ファイルからのデータの入力方法なのか
データの解析方法なのか
はたまた ヒストグラムの出力の仕方か
データの種類などはどんな具合だとか
いったい何がどこまで理解できていてどこでツマヅイテおられるのでしょう?
出来ているソースがあるなら掲示して この部分が期待した通りに動作しないのですがといった質問をしましょう
考え方としては ヒストグラムの要素種別以上のカウント用配列を準備
ファイルから読み込んだデータの配列要素をインクリメント
全てのデータを読み終えたら
カウンタ配列にしたがってヒストグラムを描画
といった手順ですよ
この回答への補足
説明不足ですいませんでした。
まず0~255の乱数が1000入力されたテキストファイルを作成して、
そのテキストファイルを読み込んで、ヒストグラムを出力するプログラムを作成します。
出力で乱数ファイルの中に0は何個、1は何個…255は何個という結果が出ればいいです。
そのあと、そのデータをエクセルを用いてグラフを表示する方法です。
今の地点では乱数のファイル作成は出来ました。
カウンタ配列も初めて聞く言葉なので、ソースは全く分かりません。
これでよろしいでしょうか?
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- その他(コンピューター・テクノロジー) エクセルの課題について 1 2022/07/25 14:39
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- C言語・C++・C# 至急お願いします。C言語で.imgのファイルを読み込んで1バイトづつ出力するプログラムを作りたいので 3 2023/01/16 22:49
- Java Javaの問題なのですが、 永久ループを使って以下に従って数値を出力するプログラムを作成する。 ・1 3 2023/06/06 18:43
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Java Java 石取りゲーム 3 2023/02/02 15:46
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 malloc 関数を使って教えてください。 入出力例1 3 2022/07/21 09:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Visual C++を 用いたテキストフ...
-
VBのByte配列をVARIANTに格納し...
-
C++で経過日の計算
-
C言語(サイズ指定のない配列)
-
配列ポインタの関数中のメモリ領域
-
Visual Studioのタイマ処理を使...
-
VC6.0で作成したDLLでVBからの...
-
プログラミングに関する問題が...
-
配列の要素数に変数を入れたい...
-
C言語の配列のコピーについて質...
-
STLを使わずに可変長配列を再現...
-
eを小数第200位くらいまで求...
-
配列要素の値の入れ替え
-
構造体の変数の取り方を教えて...
-
Greedy Searchのプログラムにつ...
-
C# pictureBox(a)
-
クラスのデータメンバ?
-
c言語について、 配列の画像の...
-
ヒストグラムのプログラム
-
// c のポインタと配列について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
define で 配列
-
c言語
-
C#で構造体の配列を持った構造...
-
C言語 ファイルの指定された行...
-
C言語において、 配列要素をひ...
-
C言語の課題が出たのですが自力...
-
C#で配列が空かを判定するには?
-
構造体のextern方法
-
C言語の配列のコピーについて
-
c言語 構造体
-
C言語 数値の連続入力について
-
MFC - ダイアログボックスのPic...
-
C++DLLからC#へのコールバック...
-
配列のアドレス部
-
要素数・要素の値が未定の配列...
-
C言語についてです 5人のテスト...
-
.NET C++で、構造体の配列をnew...
-
2番目の最大値を求める
おすすめ情報