2015-10-23 2 views
-1

В этой первой части кода он проверяет, вводит ли пользователь имя пользователя и пароль, и если да, то мы входим в систему. Эта часть кода в порядке. Он работает, когда это предполагается.Как проверить, не соответствует ли строка другой строке в массиве?

Первый код:

//If the user entered a username & pass that matches a stored user & pass 
if (incomingClients[i].username == existingClients[e].username) { 
    if (incomingClients[i].password == existingClients[e].password) { 
     //LogInClient(); 
    } 
} 

В этой второй части, он должен проверить, если пользователь ввел имя пользователя, которое не существует, и если он не существует, то мы говорим пользователю, что он/она ввела имя пользователя, которого не существует.

Второй код:

//If the user entered a username that DOES NOT match a stored user 
if (incomingClients[i].username != existingClients[e].username) { 
    //NotifyClientUserDoesntExist(); 
} 

Проблема, которую я имею здесь в том, что второй код всегда верно. Почему это?

Если я ввожу имя пользователя, которое существует, первый код выполняется, но также и второй код. Я хочу, чтобы второй код выполнялся, если имя incoming.username не совпадает с именем existing.username.

Заранее спасибо.

+0

Просьба показать [MVCE] (http://stackoverflow.com/help/mcve). Вы даже не сказали нам тип 'username', что довольно важно. –

ответ

0

Потому что, вероятно, ваш чек внутри для цикла LILE

for (int e = 0; e < existingClients.size(); ++e) { 
    if (incomingClients[i].username == existingClients[e].username) 
    if (...) { 

    } 

    if (incomingClients[i].username != existingClients[e].username) { 
    .. 
    } 
} 

Но логика неверна, потому что вы считаете, пользователь, который не существует, как только вы найдете один существующий клиент с другим именем пользователя. Код должен быть что-то вроде:

const auto& user = find_if(begin(existingClients), end(existingClients), [](const User& user) { return user.username == existingClients[i].username; } 

bool isExistingLogin = user != existingClients.end(); 
bool isCorrectLogin = isExistingLogin && user->password == incomingUsers[i].password; 

Так что существует Войти, если любой из existingClients имеет правильное имя пользователя, и это правильно, если она существует, и пароль совпадает.

0

Почему бы не сделать это?

if (incomingClients[i].username == existingClients[e].username) { 
    if (incomingClients[i].password == existingClients[e].password) { 
     //LogInClient(); 
    } 
} 
else { 
    //NotifyClientUserDoesntExist(); 
}