今私は課題をやっていてその内容が、ファイルを読み込んで各行が反転する加工処理をし、別のファイルに出力するというプログラムを作成しています。
仕様の中の一つ、「データを加工を行ってもファイル内の行数は変わらないものとします」という項目がうまくいきません。
文字列の反転は出来たのですが、改行が変なところに入ったりしてしまい行数が変わってしまいます。
よろしければ原因と解決方法をお教えください。
仕様は以下になります。
<仕様詳細>
・プログラムの起動時にコマンドラインから<入力ファイル><出力ファイル>の順で
各ファイル名を指定できるものとします。
・ユーザの使い方が正しくない場合には、ユーザに使用方法を提示します。
・入力ファイルが見つからなかった場合は、その旨が分かるメッセージを表示します。
・出力ファイルが作成できなかった場合は、その旨が分かるメッセージを表示します。
・入力ファイルに書かれるデータは半角英数字のみとします。
・データを加工を行ってもファイル内の行数は変わらないものとします。
・入力ファイルのサンプルとしてsample_data.txtを使用してください。
入力ファイルサンプル
sample_data.txt
ファイル入出力と文字列反転処理
#include <stdio.h>
int main(int argc , char *argv[]){
FILE *fi,*fo;
char str[256];
char reversalStr[256];
char *pt,*pt1;
pt = str;
pt1 = reversalStr;
int i,j;
if(argc != 3){
printf("\n引数の数が違います。\n実行ファイル名 出力元ファイル名 出力先ファイル名 を引数に持たせてください");
}
fi=fopen(argv[1],"r");
if(fi == NULL){
printf("\nエラー:出力元ファイル名を正しく指定してください。\n");
return 1;
}else{
fo=fopen(argv[2],"w");
if(fo == NULL){
printf("\n\n出力先ファイル名の記述を省略した際は出力されません。\n存在しないファイルを指定した場合は新しくファイルが作成されます。\n既にファイルがある場合は上書きされます。\n\n");
}
}
while(fgets(str,256,fi) != NULL){
while(*pt != '\0'){
pt++;
i++;
}
j = i;
while(i>0){
pt--;
*pt1 = *pt;
pt1++;
i--;
}
*pt1 ='\0';
fputs(reversalStr,fo);
//出力確認用のコードprintf("%s",reversalStr);
while(j>0){
pt1--;
j--;
}
}
fclose(fi);
fclose(fo);
return 0;
}