2017-12-13 16 views
0

私は現在Cを勉強していますが、私はまだそれほど良くありません。私はいくつかの人々の名前を入力し、同時にその名前の.txtファイルを作成するプログラムを作成しようとしています。たとえば、「Richard」と入力すると、Richard.txtというファイルが作成されます。そして.txtファイルの中で、私は彼らの名前をもう一度書きたい。Cで異なるファイルにデータを書き込む

唯一の問題は、最初の名前を入力して最初の.txtファイルを作成すると、新しい名前を入力しても新しい.txtファイルが作成されないことです。しかし代わりに、最初の.txtファイルに2番目の名前を入れます。

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

struct personnel 
{ 
char name[40]; 
}; 

int addPatient(struct personnel patient[], int noAgt); 
void writeFile(struct personnel patient[], int noAgt, char filename[]); 
void emptyBuffer(void); 

int main() 
{ 
    struct personnel patient[50]; 
    int ch = 'X'; 
    int noAgt = 0; 
    char filename[100]; 
    while (ch != 'q') 
    { 
    printf("\na)\tEnter new patient" 
    "\nb)\tWrite file" 
    "\nc)\tExit program" 
    "\n\nSelect: "); 
    ch = getche(); 
    printf("\n\n"); 
    switch (ch) 
     { 
     case 'a' : 
     noAgt = addPatient(patient, noAgt); 
     break; 
     case 'b' : 
     writeFile(patient, noAgt, filename); 
     break; 
     case 'c' : 
     exit(0); 
     } 
    } 
} 

int addPatient(struct personnel patient[], int noAgt) 
{ 
printf("\nPatient %d.\nEnter name: ", noAgt + 1); 
scanf("%39[^\n]", patient[noAgt].name); 
while(getchar() != '\n') 
{ 
    ; 
} 
return ++noAgt; 
} 

void writeFile(struct personnel patient[], int noAgt, char filename[]) 
{ 
    int i; 
    FILE *fptr; 
    struct personnel rec; 
    strcpy(filename, patient[i].name); 
    emptyBuffer(); 
    strcat(filename, ".aow.txt"); 
    fptr = fopen(filename, "w"); 
    for(i = 0; i < noAgt; i++) 
    { 
     rec = patient[i]; 
     fprintf(fptr, "Name: %s ", rec.name); 
    } 
    fclose(fptr); 
    printf("\nFile of %d patients written.\n", noAgt); 
} 

void emptyBuffer(void) /* Empty keyboard buffer */ 
{ 
while(getchar() != '\n') 
{ 
    ; 
} 
} 

"int型addPatient(構造体の人事患者[]、int型noAgt)" 私は()のWriteFileに行く人の名前を入力ビットです。

"void writeFile(struct personnel patient []、int noAgt、char filename [])"ファイルの書き込み先のビットです。

答えて

0

私の最初のアドバイスは:というファイル名がメインの変数でなければ、それをwriteFile()に移動してください。パラメータの移動量が少なくて済み、コードがきれいになります。

あなたの問題は、WriteFileを()関数内である:

strcpy(filename, patient[i].name); 

あなたの変数を初期化することはありません。常に0に初期化される可能性が高いため、作成した最初のファイルに常に書き込みを行います。その行を次のように変更してみてください。

strcpy(filename, patient[noAgt-1].name); 

コードがうまく機能しているはずです。まだ私の意見では最高の解決策ではないので、noAgtはファイルを書き込む前に増分してはいけません。しかし、それはあなたのコードを掃除しようとする必要があります。

関連する問題