c语言编写存储手机号,C语言初学者求助!关于从键盘读入姓名和电话号码,将它们写入一个文件的问题。...

已结贴√

问题点数:20 回复次数:4

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

C语言初学者求助!关于从键盘读入姓名和电话号码,将它们写入一个文件的问题。

程序运行后,找不到文件。不知道哪里出错。代码也不知道怎么改!这样写代码有什么问题?要怎么解决?

57bde7fa0788dd1c6176fc9de185299c.gif

具体代码如下:

#include

#include

#include

#include

#include

#define NAME_LEN        21

#define TEL_LEN         11

typedef struct Record Record;

struct Record

{

char name[NAME_LEN];

char Tel[TEL_LEN];

Record *next;

};

Record *get_person(Record *pcurrent);

void get_name(char *pname, size_t size);

void write_file(Record *first, char *filename, FILE *pfile);

void free_record(Record *first);

int main(void)

{

Record *first = NULL;

Record *current = NULL;

Record *previous = NULL;

char more = '\0';

printf("这是一个从键盘读入姓名和电话号码,将它们写入一个文件的程序!\n");

while(true)

{

printf("现在请确认是否有从键盘读入姓名和电话号码:Y:是!N:否! ");

scanf(" %c", &more);

fflush(stdin);

if(toupper(more) == 'N')

break;

if(first == NULL)

first = current;

if(previous != NULL)

previous -> next = current;

get_person(current);

previous = current;

}

FILE *pfile = NULL;

char *filename = "myTel.txt";

write_file(first, filename, pfile);

free_record(first);

return 0;

}

Record *get_person(Record *pcurrent)

{

pcurrent = (Record*)malloc(sizeof(Record));

if(!pcurrent)

{

printf("没有分配内存!\a\a\a\n");

exit(1);

}

printf("现在从键盘读入不超过 %d 字节姓名: ", NAME_LEN - 1);

get_name(pcurrent -> name, NAME_LEN);

printf("现在从键盘读入%s的电话号码: ", pcurrent -> name);

get_name(pcurrent -> Tel, TEL_LEN);

pcurrent -> next = NULL;

return pcurrent;

}

void get_name(char *pname, size_t size)

{

fflush(stdin);

fgets(pname, size, stdin);

size_t len = strlen(pname);

if(pname[len - 1] == '\n')

pname[len - 1] = '\0';

}

void write_file(Record *first, char *filename, FILE *pfile)

{

Record *pcurrent = NULL;

for(pcurrent = first; pcurrent != NULL; pcurrent = pcurrent -> next)

{

if(!(pfile = fopen(filename, "a")))

{

fprintf(stderr, "打开%s文件不成功!\a\a\a\n", filename);

exit(1);

}

setvbuf(pfile, NULL, _IOFBF, BUFSIZ);

size_t len_name = strlen(pcurrent -> name);

if(EOF == fputs(pcurrent -> name, pfile))

{

fprintf(stderr, "%s写入%s文件不成功!\a\a\a\n", pcurrent -> name, filename);

exit(1);

}

int i = 0;

for(i = 0; i < NAME_LEN - len_name; ++i)

{

char ch1 = ' ';

if(EOF == fputc(ch1, pfile))

{

fprintf(stderr, "写入%s文件不成功!\a\a\a\n", filename);

exit(1);

}

}

if(EOF == fputs(pcurrent -> Tel, pfile))

{

fprintf(stderr, "电话号码写入%s文件不成功!\a\a\a\n", filename);

exit(1);

}

char ch2 = '\n';

if(EOF == fputc(ch2, pfile))

{

fprintf(stderr, "写入%s文件不成功!\a\a\a\n", filename);

exit(1);

}

fclose(pfile);

pfile = NULL;

}

}

void free_record(Record *first)

{

Record *pcurrent = NULL;

Record *previous = NULL;

pcurrent = first;

while(pcurrent != NULL)

{

previous = pcurrent;

pcurrent = pcurrent -> next;

free(previous);

previous = NULL;

}

free(first);

first = NULL;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值