新生活を充実させるための「こだわり」を取材!!

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

0
242
5654
232
3123
756



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

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

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

教えて!goo グレード

A 回答 (4件)

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型で問題ありません。
    • good
    • 0
この回答へのお礼

ありがとうございます。

勘違いしている箇所も指摘していただき参考になりました。

丁寧な説明ありがとうございました。

お礼日時:2007/12/03 14:32

ANO2です。

すみません、ミスりました。

fprintfのところで、変換指定子を%fにしてました、histがint型なら%dですね。
    • good
    • 2

**.txtのようにファイルに保存する方法ってことでいいのかな?


だとしたら

program.exe >> **.txt

とリダイレクトすればどうでしょうか?

もしくは、
FILE *fp;
fp = fopen("**.txt", "w");

if(fp == NULL){
perror("ファイル処理(open)に失敗");
exit(1); }

for(i=0;i<N;i++)
fprintf(fp, "%f\n", hist[i]);

if( fclose(fp) != 0 ){
perror("ファイル処理(close)に失敗");
exit(1); }

のようにファイルに出力されるようにコードを書くとか。
    • good
    • 0
この回答へのお礼

丁寧な説明ありがとうございます!

おかげで解決できそうです!

お礼日時:2007/12/03 14:31

書式文字列 "%d" を使えばよいです。

    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2007/12/03 14:31

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

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

人気Q&Aランキング