警告C4700:使用未初始化的局部变量'p'

时间:2014-09-09 06:33:01

标签: c++ variables pointers local

此代码编译并运行虽然给出了我无法修复的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(); }

1 个答案:

答案 0 :(得分:4)

警告很清楚。你声明一个变量而不是初始化它:

char p;

然后使用其未初始化的值:

while(p!=13)
{
    // ...
}

在使用前初始化它:

char p = 0; // or any value other than 13

或重构逻辑,以便在您分配给它之前不使用它的值:

do
{
    // ...
} while (p != 13);

然后了解缓冲区溢出并停止将用户输入读入固定大小的缓冲区而不检查长度。这是C ++,而不是C,所以通常应该使用std::string来存储字符串值。