此代码编译并运行虽然给出了我无法修复的Microsoft编译器错误
警告C4700:未初始化的本地变量''已使用。
这是代码的起始行,我认为
void employee::loginemployee()
{
char uname[15];
char pass[15];
char p;
int i=0;
cout<<"\n\t\tEnter User Name :-";
cin>>uname;
puts("\n\t\tEnter Password :-");
while(p!=13)
{
p=_getch();
_putch('*');
pass[i]=p;
i++;
}
pass[i]='\0';
ifstream objdata;
objdata.open("HRStaff",ios::in|ios::out|ios::binary|ios::app);
if(!objdata)
{
cout<<"\n-----Cannot Open the File-----\n";
//return 1;
}
int nflag=0;
while(!objdata.eof())
{
objdata.read((char *)& info, sizeof(info));
if(strcmp(uname,info.uname)==0 )
{
system("cls");
cout<<"\n\n\n\t\t****************************************";
cout<<"\t\t\t\t\t\t\t Welcome TO EMS"<<info.uname<<endl;
cout<<"\t\t****************************************\n"<<endl;
info.putdata("SPS");
cout<<"\n\tPress any key to log out...";
nflag=1;
}
}
if(nflag==0)
{
cout<<"\n\nSorry !! Your Username & Password do not match.";
_getch();
logoutAll();
}
objdata.close(); }
答案 0 :(得分:4)
警告很清楚。你声明一个变量而不是初始化它:
char p;
然后使用其未初始化的值:
while(p!=13)
{
// ...
}
在使用前初始化它:
char p = 0; // or any value other than 13
或重构逻辑,以便在您分配给它之前不使用它的值:
do
{
// ...
} while (p != 13);
然后了解缓冲区溢出并停止将用户输入读入固定大小的缓冲区而不检查长度。这是C ++,而不是C,所以通常应该使用std::string
来存储字符串值。