電話帳で修正関数を作っています。
//氏名を修正する。
//電話番号を修正する。
のところで修正箇所のコードの書き方が浮かんでこないのでの助言、ヒント
をお願いできればありがたいです。
#include <stdio.h> #include <stdlib.h> #include <string.h> #define Max 256 char dtfile[]="data_tel3.txt"; char dtfile2[]="data_tmp2.txt"; int main(void) { FILE *fp1,*fp2 ; char line[Max]={0}; // 検索対象文字列を読み込む配列 char line2[Max]={0}; char buff[256]; //検索文字列 char buf1[256]; char buf2[256]; int count=0; char *ptr; if(!(fp1 = fopen(dtfile, "r"))){ printf("ファイルを開くことができません\n"); exit(1); } if ((fp2 = fopen(dtfile2, "w")) == NULL) { fprintf(stderr, "ファイルのオープンに失敗しました.\n"); exit(1); } printf("修正する名前を検索します。修正する名前を入力して下さい。\n"); scanf("%s",buff); //printf("buff=%s\n" ,buff ); printf("修正前のdata_tel3.txt\n"); //linesから1行ずつ取り出す。 while(fgets(line, 256, fp1) != NULL){ printf( "%s" ,line ); } fseek(fp1, 0, SEEK_SET); while(fgets(line, 256, fp1) != NULL){ ptr=strstr(line,buff); if(ptr){ printf( "\n\n" ); //氏名を修正する。 printf("%sの名前を修正する。\n",ptr); scanf("%s",buf1); strtok(buf1,"\n"); //電話番号を修正する。 printf("%sの電話番号を修正する。\n",ptr); scanf("%s",buf2); strtok(buf2,"\n"); sprintf(line,"%-11s,%s\n",buf1,buf2); //書式付き出力を文字列bufに格納する //data_tmp.txtに修正したデータを保存する fputs(line,fp2); }else{ //data_tmp.txtに修正する前のデータを保存する // 書き込み fputs(line,fp2); count++; if ( count < 0 ) { count=fprintf(stderr, "ファイルの書込みに失敗しました.\n"); exit(1); } } } fclose(fp2); fclose(fp1); printf("\n\n"); fp2 = fopen(dtfile2, "r"); fp1 = fopen(dtfile, "w"); printf( "一時ファイルdata_tmp2.txt\n" ); while(fgets(line2, 256, fp2) != NULL){ printf( "%s" ,line2 ); // 書き込み fputs(line2,fp1); count++; if ( count < 0 ) { count=fprintf(stderr, "ファイルの書込みに失敗しました.\n"); exit(1); } } fclose(fp1); printf("\n\n"); fp1 = fopen(dtfile, "r"); printf( "修正後のdata_tel3.txt\n"); while(fgets(line, 256, fp1) != NULL){ printf( "%s" ,line ); } // ファイルクローズ fclose(fp1); fclose(fp2); return 0; } 実行結果 naka@naka ~/kadai/kadai9-8 $ gcc -o data_amend2 data_amend2.c -Wall nakamura@nakamura ~/kadai/kadai9-8 $ data_amend2 修正する名前を検索します。修正する名前を入力して下さい。 naka 修正前のdata_tel3.txt sachiko ,090-0809 naka ,090-0787 kiyoko ,090-9999 satou ,090-3214 kinosita ,090-8769 yamada ,090-4325 itou ,080-6354 sudou ,090-3333 kitou ,080-1342 naka ,090-0787 の名前を修正する。 nabe naka ,090-0787 の電話番号を修正する。 090-0007 一時ファイルdata_tmp2.txt sachiko ,090-0809 nabe ,090-0007 kiyoko ,090-9999 satou ,090-3214 kinosita ,090-8769 yamada ,090-4325 itou ,080-6354 sudou ,090-3333 kitou ,080-1342 修正後のdata_tel3.txt sachiko ,090-0809 nabe ,090-0007 kiyoko ,090-9999 satou ,090-3214 kinosita ,090-8769 yamada ,090-4325 itou ,080-6354 sudou ,090-3333 kitou ,080-1342
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/01/07 00:35
2018/01/07 01:22
退会済みユーザー
2018/01/07 04:56
2018/01/07 05:04 編集