0

現在、Windows XP で MinGW を使用しています。

ユーザーの入力を受け取り、それらを.txtファイルに入れるプログラムをコーディングしました

typedef struct data_base{
    char name[254];
    int age;
    int postalcode;
    struct data_base *next;
}person;

.txt ファイルのデータを編集する方法があるかどうか疑問に思っていました。

たとえば、.txt ファイルには、ユーザーの入力に基づいて 3 つのデータ セットがあります。

Steven    //name
19        //age
1100      //postal code
Jack 
24
2203
Mary
21
0109

どのデータセットを編集したいかをユーザーに尋ねます。次に、編集したデータを取得した後、ユーザーが選択した特定のセットの .txt ファイルにそのデータを上書きします。


#include <stdio.h>
#include <stdlib.h>

typedef struct data_base{
    char name[254];
    int age;
    int postalcode;
    struct data_base *next;
}person;

void read()
{
person *curr[20];
int count = 0;
FILE *f;
int editchoice = 0;

f = fopen("personfile.txt","r+");
// Read the data in the file based on user's input

//Display the names: 1. Steven 2.Jack  3.Mary
printf("Editing Whose Data?: \n");
scanf("%d",&editchoice);    

printf("New name: \n");
scanf("%s",&curr[editchoice]->name);
fprintf(f,"%s\n",curr[editchoice]->name);

printf("New age: \n");
scanf("%d",&curr[editchoice]->age);
fprintf(f,"%d\n",curr[editchoice]->age);

printf("New name: \n");
scanf("%d",&curr[editchoice]->postalcode);
fprintf(f,"%d\n",curr[editchoice]->postalcode);

}

データが上書きされると思っていましたが、そうではありません。(初心者ですみません。)

4

2 に答える 2

0

ファイルから読み取り、結果を別のファイルに書き込むことができます。

レコードごとに読み取り、

レコードに変更したい人がいる場合は、変更します

それから

レコードを tmp ファイルに読み込んでダンプします。これには、発生時に変更されたレコードが含まれます。

次に、両方のファイルを閉じ、古いファイルを削除し、tmp ファイルの名前を変更します。

于 2013-10-15T14:11:03.010 に答える
0

はい、あなたはほとんどそこにいます。

私にとって、あなたには2つの選択肢があります。または、そのファイルをメモリ内 (リスト内) で変更し、リストをファイルにダンプした後に変更します。または、ファイルを変更して、ファイルをメモリに (そのリストに) 再読み込みします。

または

変更したいデータの先頭にファイル カーソルを置いて変更することで、ファイル内のデータを変更できますが、メモリ内のデータも更新する必要があります。

その問題に対する私のアプローチは次のとおりです。

ファイル内の人のブロックに「id」位置を与える関数を作成します。この方法で、人のデータをファイルに読み書きできます。

于 2013-10-15T13:51:52.693 に答える