1

我写了以下功能

 void validateUser(void)
 {
         string uName;
         string uPassword;
         char c;

         map <char*, char*> authMap;
         authMap["balaji"] = "balaji";
         authMap["rohan"] = "rohan";

         cout << "Please Enter your user name :";
         cin >> uName;
         cout << "Please Enter your password :";
        // initTermios(0);
         while((c = getchar()) != '\n')
         {
           uPassword.push_back(c);
         }
         cout << "YOU Entered :: "<<  uPassword <<std::endl;
}

当我执行上述函数时,我发现输入用户名后我按下回车键然后控制不会进入while循环,即使我没有输入任何密码字符串。上面的蚂蚁解决方案?预先感谢。

4

1 回答 1

3

作为输入用户名的结果输入的换行符仍在标准输入中,接下来读取的是这个,因此循环终止条件立即为假。您需要跳过换行符,这可以通过以下方式实现ignore()

cin.ignore();

建议不要混合使用 C 和 C++ IO 函数(我不确定它如何交互的确切规则,但我更愿意避免它):

while (cin.get(c) && '\n' != c)
{
    uPassword.push_back(c);
}

或者只是使用std::getline()

getline(cin, uPassword);

正如我在评论中提到的,地图将由字符串文字的地址而不是字符串内容作为键控。建议map<std::string, std::string>改用。

于 2012-06-22T10:00:56.233 回答