代码如下:#include <stdio.h>#include <stdlib.h>#include <time.h>#include<Windows.h>struct Res{ char name[15]; char sex[4]; char tel[20]; char address[15]; char userid[19]; char cardId[20]; char pwd[6]; double salary;};void CreateCardId(char* myId){ srand(time(NULL)); int n = rand()%10; char* ID = "12345678"; myId = (char*)malloc(50*sizeof(char)); memset(myId, 0, 50); char* random = (char*)malloc(16*sizeof(char)); strcpy(myId, ID); int i = 0; for(i = 0; i<8; ++i) { memset(random,0,16); int n = rand()%10; itoa(n, random,10); strcat(myId,random); } printf("给您分配的银行卡号为:"); puts(myId);}void InsertUser( FILE* file ){ struct Res User; char* usepwd = (char*)malloc(6*sizeof(char)); memset(usepwd, 0 ,6); puts("请输入名字"); gets(User.name); puts("请输入性别"); gets(User.sex); puts("请输入电话"); gets(User.tel); puts("请输入身份证号"); gets(User.userid); CreateCardId(User.cardId); fprintf( file,"name=%s\nsex=%s\ntel=%s\nuserId=%s\ncarId=%s\n",User.name, User.sex, User.tel, User.userid, User.cardId);}int main(){ int i = 0; FILE* file = fopen("d:\\bank.ini","w"); if( NULL == file ) { puts("文件打开失败"); return -1; } puts("请输入你需要的服务"); puts("1.开户"); puts("2.查询余额"); puts("3.存款"); puts("4.取款"); puts("5.转账"); puts("6.销户"); puts("7.退出"); scanf("%d", &i); fflush(stdin); system("cls"); switch(i) { case 1: InsertUser( file ); } fclose(file); file = NULL;}
这是你定义的字符串没有初始化为0,当输出的时候编译器找到不到字符串结束符。就会出现这样的乱码。你可以将你的结构体中定义的字符数组都初始化为0.或者直接用memset()把结构体定义的变量初始化为0试一下。你的程序没有具体看,不过应该就是这个问题吧~