在C中写入不同文件中的数据

时间:2017-12-13 00:16:52

标签: c file loops

我现在正在学习C,但我还不是那么好。我正在尝试编写一个程序,我想输入一些人的名字并同时创建一个带有他们名字的.txt文件。例如,如果我输入“Richard”,它将创建文件Richard.txt。在.txt文件中我想再次写下他们的名字。

唯一的问题是,在输入第一个名称并创建第一个.txt文件后,输入新名称将不会创建新的.txt文件。但相反,它会将第二个名称放在第一个名称后面的第一个.txt文件中。

#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(struct personnel patient [],int noAgt)”是我输入writeFile()中人员姓名的位置。

“void writeFile(struct personnel patient [],int noAgt,char filename [])”是我写文件的位。

1 个答案:

答案 0 :(得分:0)

我的第一个建议是:如果您不需要main中的 filename 变量,请将其移至writeFile()。减少参数移动并使代码更清晰。

您的问题在writeFile()函数中:

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

您从未初始化 i 变量。它可能总是被初始化为0,因此您总是写入您创建的第一个文件。尝试将该行更改为:

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

你应该看到代码运行得更好。在我看来,仍然不是最好的解决方案,因为 noAgt 在写入文件之前可能不会增加。但它应该让你继续清理你的代码。