|
ファイルに入力された文字列を読み込んで別のファイルに順番に出力させるプログラム。
(条件) ・入力ファイルはカンマ区切り 例),aaa,bbb,ccc,ddd,
・文字列の左隣に99:までのカウンターを配置 例)00:aaa 01:bbb
・処理終了時に出力件数と入力件数を画面に表示
・ファイル出力件数が100を超えたときそれ以後は出力せずに
正常終了させる。
・入力件数が0件の時はファイル出力を行わない。
#include <stdio.h>
#include <stdlib.h>
//出力カウンター
void count( int *i, int *j, FILE *fpo )
{
fprintf( fpo, "%d%d:", *j, *i);
if( *i == 9 ){
if( *i == 9 && *j == 9){
exit(1);
}
*j = *j + 1;
*i = *i - 9;
}else{
*i = *i + 1;
}
return 0;
}
int main()
{
FILE *fpin; //ファイルポインタ
FILE *fpo;
char fnamein[64]; //ファイル名用配列
char fnameo[64]; //ファイル名用配列
char c;
int i = 0;
int j = 0;
//読み込みファイルオープン
printf("読み込むファイル名を入力:");
scanf( "%s", fnamein);
if( ( fpin = fopen( fnamein,"r" ) ) == NULL ){
fprintf( stderr, "\n %s はオープンできませんでした\n", fnamein);
exit(1);
}
//出力ファイルオープン
printf("出力するファイル名を入力:");
scanf( "%s", fnameo);
if( ( fpo = fopen( fnameo,"w" ) ) == NULL ){
fprintf( stderr, "\n %s はオープンできませんでした\n", fnameo);
exit(1);
}
//一文字づつ処理
while( ( c = getc( fpin ) ) != EOF ){
if( c == ',' ){
fprintf( fpo, "\n" );
count( &i, &j, fpo);
}else{
putc( c, fpo );
}
}
fclose(fpin);
fclose(fpo);
return 0;
}
途中まで作って見ましたが、あまりすっきりしません。
よいアドバイスがありましたらよろしくお願いします。
|