【发布时间】:2013-10-10 05:47:35
【问题描述】:
我正在做一个程序,它会提示用户使用他们的用户名和密码登录。我有一个包含用户名和密码列表的文本文件(userandpassword.txt)。所以发生的事情是,用户输入他们的用户名和密码,他们的输入将与文本文件中的用户名和密码匹配。如果匹配,他们可以登录,如果不匹配,它将打印出“无效的用户名或密码”。以下是我所拥有的。
文本文件(用户名和密码.txt)
john abcd
mary efgh
jane ijkl
我的代码
string line = " ";
ifstream readFile("userandpassword.txt");
string UserName;
string Password;
string _UserName;
string _Password;
cout << "Enter UserName: ";
cin >> UserName;
cout << "Enter Password: ";
cin >> Password;
while (getline(readFile,line)) {
stringstream iss(line);
iss >> _UserName >> _Password;
if (UserName == _UserName && Password == _Password) {
cout << "Login Successfully!"<< endl;
}
else {
cout << "InValid UserName And Password"<< endl;
}
}
问题是如果我输入用户名:john 和密码:abcd,它将返回如下所示的输出
Login Successfully!
InValid UserName And Password
InValid UserName And Password
而如果我输入用户名:mary 和密码:efgh,它会返回如下所示的输出
InValid UserName And Password
Login Successfully!
InValid UserName And Password
最后是用户名:jane 和密码:ijkl
InValid UserName And Password
InValid UserName And Password
Login Successfully!
但这不是我想要的结果,我想要的是它逐行读取文件中的用户名和密码,如果与用户的输入匹配,它只会输出“登录成功”,如果它不匹配,它只会打印出“无效的用户名和密码”。
例如
如果我输入用户名:mary 和密码:efgh,我的预期输出
Login Successfully!
如果我输入任何无效的用户名和密码,我的预期输出
Invalid Username and password.
关于我应该如何实现预期输出的任何想法或建议?谢谢
【问题讨论】:
-
这是一个简单的逻辑错误。如果您希望某事只发生一次,请不要将其置于 while 循环中。
-
您需要浏览文件并找到匹配项。如果找到,您可以停止搜索该文件。在循环搜索之后,您检查是否存在匹配,例如,通过查看文件的状态并报告成功或失败。
-
@john 好的,谢谢你的建议
-
@DietmarKühl 也感谢您的建议
-
在你的 while 中添加另一个条件,例如
bool found=false; while (!found && getline(readFile,line)) {..}
标签: c++ visual-c++ c++11