- ベストアンサー
数字の入った配列をファイルへ出力。
今、hist[256]というint型の配列に数字が入っているとします。 これを、テキストファイルに出力して、 0 242 5654 232 3123 756 ・ ・ ・ こんな感じで、ファイルに出力したいです。 文字としての出力になるのでhist[256]配列を、int型からchar型に変換しないとダメでしょうか? また、変換するとしたら、char型だと unsigned char にしても 0~256の値までしか1つの配列に保存できませんよね? もっと大きい数字も入っているので何とかする方法も教えて下さい。 初歩的な質問で申し訳ありませんが、よろしくお願いします。
- みんなの回答 (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型で問題ありません。
その他の回答 (3)
- mac-dows
- ベストアンサー率16% (5/30)
ANO2です。すみません、ミスりました。 fprintfのところで、変換指定子を%fにしてました、histがint型なら%dですね。
- mac-dows
- ベストアンサー率16% (5/30)
**.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); } のようにファイルに出力されるようにコードを書くとか。
お礼
丁寧な説明ありがとうございます! おかげで解決できそうです!
- asuncion
- ベストアンサー率33% (2127/6289)
書式文字列 "%d" を使えばよいです。
お礼
ありがとうございます!
お礼
ありがとうございます。 勘違いしている箇所も指摘していただき参考になりました。 丁寧な説明ありがとうございました。