• 締切済み

書式付標準出力をするには??

こんにちは テキストファイルを読み込んで .hファイルに書き込んでいるものなのですが.... #include <stdio.h> #define MAX 256 int main() { FILE *in, *out; char *p, buf[MAX]; int lhs, in_quote; in = fopen("moutput.txt", "r"); if (in == NULL) { printf("Cannot open sample.txt\n"); return 1; } out = fopen("moutput.h", "w"); if (out == NULL) { printf("Cannot open sample.h\n"); return 1; } while (fgets(buf, MAX, in) != NULL) { lhs = 1; in_quote = 0; for (p = buf; *p != '\0'; p++){ if (*p == '=') { lhs = 0; fputc('\n', out); } else if (*p == '"'){ if (in_quote) { in_quote = 0; fputc('\n', out); } else in_quote = 1; }else if (lhs || in_quote){ fputc(*p, out); } } } } 上記のプログラムでfputc(*p,out)で出力させている 部分があると思いますが。 実はこれを書式付で出力させたいと思っています。 今現在読み込んでいるファイルは "POINT_a"="POINT_b"+1000*"POINT_D" で出力結果は POINT_a POINT_b POINT_D なのですが これを VALUE: POINT_a VALUE: POINT_b VALUE: POINT_D にしたいのですが fputcのところをどうしたらいいでしょうか?? ご教授よろおしくおねがいします。

みんなの回答

  • min_is
  • ベストアンサー率25% (1/4)
回答No.5

あらかじめ文字列用のバッファを用意しておき >fputc(*p, out); の代わりに1文字づつコピーすればよいのでは。 あとは for ループから抜けたところで printf("VALUE: %s\n",コピー用バッファ); みたいな感じでよいのではないでしょうか? # コピー用バッファの文字列終端に注意してください。

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.4

(件名と内容に齟齬があるけど・・) >fputc のところをどうしたらいいでしょうか?? >ご教授よろおしくおねがいします。  「教授、よろおしくおねがいね」の間違いでは・・?。  女子大生に言われれば、「うん、いいよ」となるな。 ☆fputc にこだわらずに・・ではダメですか。  「ファイル」でなく、「画面」のものを投稿します。    (BorlandC++5.6.4)  「ご教示方」には程遠いかな、「参考」として下さい。 ・現状で動作をご確認頂き、「ファイル」にする場合は、「 printf( 」を「 fprintf( out, 」と置換すれば・・。 #include <stdio.h> #define MAX 256 int main() {  char buf[MAX] = "\"POINT_a\"=\"POINT_b\"+1000*\"POINT_D\"\n";  int i, iCnt; // ファイル関連 // while( NULL != fgets( buf, MAX, in ) ){   printf( "%s", buf ); // この行は「画面」時のみ   iCnt = 0;   for( i = 0; i < MAX; i++ ){    if( '\n' == buf[ i ] ) break; // 1行終了    if( '\"' == buf[ i ] ){     iCnt++;     if( iCnt % 2 ){ // 括り始め      printf( "VALUE: " );      continue; // 頭の " は不要     }     printf( "\n" );// 括り終わり・改行     continue; // 後ろの " も不要    }    if( 0 == ( iCnt % 2 ) ) continue; // 不要文字    printf( "%c", buf[ i ] ); // 括り内文字出力   }  fcloseall();  return( 0 ); } 注:インデントに全角空白を用いています。タブに一括変換して下さい。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

>fprus関数とはなんでしょうか それはおそらくタイプミスで、 本当はfputsとタイプしたかったのではないかと思います。

noname#208124
noname#208124
回答No.2

fprintf で 標準出力ってstdoutのことを言うもんじゃないの?

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

> fputc('\n', out); > } else > in_quote = 1; > }else if (lhs || in_quote){ > fputc(*p, out); を fputc('\n', out); } else { in_quote = 1; fprus( "VALUE:", out ); } }else if (lhs || in_quote){ fputc(*p, out); といった具合でいいのでは

lilhalileh
質問者

補足

返信ありがとうございます。 調べたんですけど....... fprus関数とはなんでしょうか?? 一応自分C言語で OSはソラリス(コマンド:vi) なんですけど......。

関連するQ&A