如果语句第二个条件总是执行

时间:2014-04-01 06:35:10

标签: c++ string struct

我有一个名为users的结构,其中包含用户名信息:

struct User{
    string name;
    string type;
    int credit;
    bool loginState;
};

我的程序读入一个txt文件并创建一个名为“users”的User结构类型数组来存储所有数据。我试图创建一个删除用户的函数,所以在下面的for循环我正在搜索字符串

userName
用户数组中的

。如果存在用户名,则该用户帐户的所有信息都存储在用户临时文件中。否则会生成一条错误,指出用户输入的内容不存在。

string userName;
User temp;    

cout<<"Please enter a username to delete:";
cin >> userName;

for(int i=0; i<usersSize; i++){
    if((users[i].name).compare(userName) == 0){
        temp.name = users[i].name;
        temp.type = users[i].type;
        temp.credit = users[i].credit;
        temp.loginState = users[i].loginState;
    }else{
        cout << "Error: User does not exist";
    }
 }

我测试了我的程序,无论输入是什么,无论用户是否存在,if语句总是输出第二个条件。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您需要首先检查用户是否存在,然后处理找到的用户。您的代码中的问题是for循环检查所有用户并显示所有用户的消息,但匹配的消息(如果有)。

检查此代码:

bool userWasFound = false;
int i;
for(i=0; i<usersSize; i++){
    if((users[i].name).compare(userName) == 0){
        userWasFound = true;
        break;
    }
}

// If no user was found, 'userWasFound' will still be 'false' at this point

if(userWasFound){
    temp.name = users[i].name;
    temp.type = users[i].type;
    temp.credit = users[i].credit;
    temp.loginState = users[i].loginState;
}else{
    cout << "Error: User does not exist";
}

答案 1 :(得分:1)

使用标记表示用户是否找到了......例如

bool flag=false;
for(int i=0; i<usersSize; i++){
    if((users[i].name).compare(userName) == 0){
        temp.name = users[i].name;
        temp.type = users[i].type;
        temp.credit = users[i].credit;
        temp.loginState = users[i].loginState;
        flag=true;
        break;
    }
 }
if(!flag){
        cout << "Error: User does not exist";
}

希望它有所帮助...