AIと戦って、あなたの人生のリスク診断 >>

課題で「100個の乱数を発生させファイルに保存し、そのファイルを読み込み、昇順に並べ替えするプログラムを作れ」という課題がありました。
乱数を発生させるのと、昇順に並び替える方法はわかるのですが、二つをうまく組み合わせる方法がわかりません。
ポインタを使ってファイルの入出力をするプログラムを教えてくださる方がいたら連絡ください。
出来れば模範のプログラムを掲示していただけるとうれしいです。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>ポインタを使ってファイルの入出力をするプログラム



ポインタの意味が良くわかりません。ヒントになるような部分を書きますので、参考にしてください。

#define FILENAME "sample.txt"
#define ARRAYSIZE 100

int RandomNumber[ARRAYSIZE];

void WriteToFile()
{
FILE *fp;
int i;
fp = fopen(FILENAME, "w");
for (i = 0; i < ARRAYSIZE; i++) {
fprintf(fp, "%d\n", RandomNumber[i]);
}
fclose(fp);
}

void ReadFromFile()
{
FILE *fp;
int i;
fp = fopen(FILENAME, "r");
for (i = 0; i < ARRAYSIZE; i++) {
fscanf(fp, "%d", &RandomNumber[i]);
}
fclose(fp);
}
    • good
    • 0

「組み合わせる」必要というのは、あまりないんじゃないでしょうか。



char *getFileName();
void generateRandomNumber(char *fileName);
void sortFile(char *fileName);
int main()
{
 char *fileName;
 fileName = getFileName();
 generateRandomNumber(fileName);
 sortFile(fileName);
 return 0;
}

みたいな感じにすれば、各サブルーチンの内容は全く他とは関係なしに
できると思いますけど。
    • good
    • 0
この回答へのお礼

参考になりました。
ありがとうございました。

お礼日時:2001/10/13 20:32

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q数字の入った配列をファイルへ出力。

今、hist[256]というint型の配列に数字が入っているとします。
これを、テキストファイルに出力して、

0
242
5654
232
3123
756



こんな感じで、ファイルに出力したいです。

文字としての出力になるのでhist[256]配列を、int型からchar型に変換しないとダメでしょうか?
また、変換するとしたら、char型だと unsigned char にしても 0~256の値までしか1つの配列に保存できませんよね?
もっと大きい数字も入っているので何とかする方法も教えて下さい。

初歩的な質問で申し訳ありませんが、よろしくお願いします。

Aベストアンサー

fprintf()関数を使えば簡単です。
簡単に言えば、printf()関数のファイル出力版です。
画面ではなく、ファイルに文字列を出力します。

サンプル
------------------------
FILE *fp;
int i;
if((fp = fopen("data.txt", "w")) != NULL){
 for(i = 0; i < 256; i++){
  if(fprintf(fp, "%d\n", hist[i]) < 0){
   //書き込みエラー
   break;
  }
 }
 fclose(fp);
}else{
 //ファイルオープンエラー
}
------------------------

%d で int型の整数を文字として表示、
\n で改行です。printf()関数と同じですね。

#サンプルはインデントに全角スペースを使っています。

-----------------------------------------------------------
>int型からchar型に変換しないとダメでしょうか?
>また、変換するとしたら、char型だと unsigned char にしても 0~256の値までしか1つの配列に保存できませんよね?

ちょっと勘違いしているようなので、説明しますが・・・

C言語の文字列は、文字の配列です。
char型は1文字を表わします。
文字列は、char型の配列になります。

例えば、整数の 123 を文字列で表現する場合、
文字数は3文字で、終端にヌル文字('\0')が入りますので、
4文字の配列になります。

unsigned char c[] = {'1','2','3','\0'};

一つ一つは文字コード(0~255)ですので、char型で問題ありません。

fprintf()関数を使えば簡単です。
簡単に言えば、printf()関数のファイル出力版です。
画面ではなく、ファイルに文字列を出力します。

サンプル
------------------------
FILE *fp;
int i;
if((fp = fopen("data.txt", "w")) != NULL){
 for(i = 0; i < 256; i++){
  if(fprintf(fp, "%d\n", hist[i]) < 0){
   //書き込みエラー
   break;
  }
 }
 fclose(fp);
}else{
 //ファイルオープンエラー
}
------------------------

%d で int型の整数を文字として表示、
\n で...続きを読む

Qヒストグラムのプログラム

乱数で入力されたテキストファイル読み込んでヒストグラムを出力するCプログラムが分かりません。
現在、乱数のテキストファイル作成まで出来ました。
ぜひ教えてください。よろしくお願いします。

Aベストアンサー

#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つの数字と仮定してコーディングしてみました。
手元では正しく動いているように思えましたが、
ご自分で確認してください。

#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("...続きを読む


人気Q&Aランキング