代码
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include<string.h>
struct Manager
{
char ID[12];
char password[20];
char name[30];
char address[100];
char email[100];
};
int main()
{
char m_email1[100];
char m_email2[100];
char iddd[12];
printf("\n-------------------------------\n");
printf("Thanks for logging in earlier\n");
printf("please enter your ID again:\n");
printf("ID: \n");
scanf("%s",iddd);
do{
printf("Please enter your new email:\n");
scanf("%s",m_email1);
printf("Please enter again:\n");
scanf("%s",m_email2);
if(strcmp(m_email1,m_email2)==0)
{
printf(" Change password successfully, please remember it!\n");
FILE*nfp;
int flag=0,row=0,count=0;
int i,j;
FILE*mfp;
mfp=fopen("manager.txt","r");
if(mfp==NULL)
{
printf("The manager.txt open failed.\n");
exit(EXIT_FAILURE);
}
while(!feof(mfp))
{
flag=fgetc(mfp);
if(flag=='\n')
count++;
}
row=count+1;//ÒòΪ×îºóÒ»ÐÐûÓл»Ðзû\n,ËùÒÔÐèÒªÔÚcountºó²¹¼Ó1
struct Manager rinfo[row];
do
{
for (i = 0; i <row; i++)
fscanf(mfp,"%s %s %s %s %s",rinfo[i].ID,rinfo[i].name,rinfo[i].address,rinfo[i].password,rinfo[i].email);
}while(strcmp(rinfo[i].ID,iddd)==0);
while (!feof(mfp))
{
for (j = 0; j <row; j++)
fscanf(mfp,"%s %s %s %s %s",rinfo[j].ID,rinfo[j].name,rinfo[j].address,rinfo[j].password,rinfo[j].email);
}
strcpy(rinfo[i].ID,m_email1);
fclose(mfp);
nfp = fopen("manager.txt", "w");
if (nfp == NULL)
{
printf("sorry");
exit(EXIT_FAILURE);
}
for (i = 0; i < 10; i++)
{
fprintf(nfp,"%s %s %s %s %s\n",rinfo[i].ID,rinfo[i].name,rinfo[i].address,rinfo[i].password,rinfo[i].email);
}
fclose(nfp);
printf("Okk!\n");
break;
}
else if(strcmp(m_email1,m_email2)!=0)
{
printf("The passwords are different. Enter again.");
}
}while(1);
return 0;
}
你这两段do...while后while没看懂你想干什么
do...while中是个for循环,你觉得你的do...while有什么作用吗?
用了while循环,那么循环里面的for循环就不能用了,去掉。在循环外定义个i变量,while中每读取一条记录,i++就可以了
第27行代码struct Manager rinfo[row];这能运行时定义吗?我觉得应该动态申请内存。new完delete吧!
你只输入了3个参数,输出给文件一大堆,不乱才稀奇了
敢不敢设置个断点,敢不敢把执行的每一步print出来
程序在你手里,编译器也在你手里,你要调试代码运行的过程,不要老觉得它是个黑箱