当我将用户名与密码一起存储在文件中时,将其附加到一个数组中,我没有存储在文件中的名称随之出现。
此代码在Borland C ++中。
void new_user()
{
clrscr();
cout<<"\nEnter your name: ";
gets(name);
cout<<"\nEnter your phone number: ";
gets(phone);
cout<<"\nEnter your email: ";
gets(email);
cout<<"\nEnter your address: ";
cout<<"\nHouse no. and Area: ";
gets(area);
cout<<"\nCity: ";
gets(city);
cout<<"\nState: ";
gets(state);
cout<<"\nEnter the pincode: ";
cin>>pincode;
getch();
int x=1;
while(x==1)
x=createuser();
}
int createuser()
{
char username[20];
int c=0;
ofstream fout,f;
ifstream fin;
cout<<"\nCreate a username (max. 10 letters): ";
fout.open("usern.txt",ios::out|ios::app);
gets(uname);
fout<<uname;
fout.close();
fin.open("usern.txt",ios::in|ios::beg);
while(!fin.eof())
{
fin>>username;
if(strcmp(username,uname)==0)
c++;
}
fin.close();
fout.open("usern.txt",ios::app);
if(c>1)
{
cout<<"\nUsername already exists!";
return (1);
}
else
{
cout<<"\nCreate a password (max. 10 letters): ";
for(int i=0;i<10;i++)
{
password[i]=getch();
cout<<"*";
}
fout<<password<<'\n';
cout<<"\nUser registered successfully!";
cout<<"\nThank you for signing up to Hindustan Tours and Travels";
f.close();
return(2);
}
当我输入用户名“ iniyan2003”和密码“ iniyan0307”时,预期的文件数据应为“ iniyan2003iniyan0307”。而是“ iniyan2003iniyan0307Iniyan”。
答案 0 :(得分:2)
for(int i=0;i<10;i++)
{
password[i]=getch();
cout<<"*";
}
fout<<password<<'\n';
您用getch
读取了10个字符,因此有10个字符的数组。但是然后您将其视为是 string ,而不是。最后一行没有办法知道应该写十个字符,所以它写的更多。
字符串是C语言中的特定内容,与字符数组不同。除非您向其传递实际的C样式字符串,否则请勿使用字符串函数(例如strcmp
或operator<<(const char *)
)。实际上,由于您使用C ++进行编码,因此根本不要使用C样式的字符串。使用std::string
并使用if (a=="hello")
之类的东西代替if ((strcmp(a, "hello")==0)
,使您的生活更轻松。
此代码还有很多其他问题。我要指出的另一个:
while(!fin.eof())
{
fin>>username;
if(strcmp(username,uname)==0)
c++;
}
您不检查读取是否成功,而只是假设读取成功。似乎您期望eof()
函数能够预测将来的读取是否成功。那不是它的作用,它只会告诉您过去,并且不能代替检查读取是否成功。