我有一个名为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语句总是输出第二个条件。我该如何解决这个问题?
答案 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";
}
希望它有所帮助...