为什么和我输入的不一样啊,怎么修改啊,求各位大佬指点
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
typedef struct user{
int numb;
char name[10];
char password[7];
float money;
struct user *next;
}user,*LinkedList;
LinkedList LinkedListInit ()
{
LinkedList head;
head =(LinkedList)malloc(sizeof(user));
head->next = NULL;
return head;
}
int CreatHead(LinkedList head)
{
LinkedList p;
p = (LinkedList)malloc(sizeof(user));
p ->numb=000000;
for(int i=0;i<9;i++)
{
p ->name[i]='A';
}
p ->money = 0;
head->next = p;
p->next = NULL ;
}
void add(LinkedList head)
{
int k,num;
char ch;
char tempname[10];
char tempassword[7];
float tempmoney=0;
LinkedList p,r;
FILE *fp;
fp=fopen("data.txt","a+");
if((fp=fopen("data.txt","a+"))==NULL)
{
printf("cannot open file!\n");
exit(1);
}
void getpassword(char *password);
do{
num = rand()%100000*10; //随机生成
}while((num/100000)==0);//检查是否是六位数
printf("系统为你自动生成的6位数帐号是%d\n",num);
printf("请输入用户姓名:");
fflush(stdin);
for(int i=0;i<9;i++)
{
scanf("%c",&ch);
if(ch == '\r' || ch == '\n') break;
tempname[i] = ch;
}
tempmoney=0;
p = head->next;
r =(LinkedList)malloc(sizeof(user));
r->numb = num;
for(int i=0;i<9;i++)
{
r->name[i]=tempname[i];
r->password[i]=tempassword[i];
}
r->money = tempmoney;
r = p;
r->next=NULL;
k=fprintf(fp, "%d %s %s %d\n",&r->numb,&r->password,&r->name,&r->money);
printf("您已完成开户操作,任意键返回主菜单。");
fclose(fp);
}
int main()
{
LinkedList head;
head=LinkedListInit();
CreatHead(head);
add(head);
return 0;
}
可以在数据写入文件的地方就是fprintf时,先把数据转换为字符串(即纯字符) ,然后再写入文件,这样才可以得到纯txt文件, 直接fprintf(fp, "%d %s %s %d\n",&r->numb,&r->password,&r->name,&r->money);这样整型按照字节写入,你直接打开txt文件看到不出来的
如果需要,可以按以下修改:
char tmpstr[64];//字符串缓存
//需要先把整型和字符串类型都保存为字符串类型,最后在txt文件查看的才是字符
sprintf(tmpstr,"%d %s %s %d",&r->numb,&r->password,&r->name,&r->money);
k=fprintf(fp, "%s\n",tmpstr);//把字符串写入文件