基本上,我希望限制用户使用以下代码以正确格式的电子邮件地址输入。
cout << "Donor's Email: ";
cin >> email;
while (email != "@" && email != "."){
cout << "Please enter correct email format." << endl;
cout << "Donor's Email: ";
cin >> email;
}
不知何故,结果是,即使我输入正确格式的电子邮件地址,但它仍然循环让我再次输入。 有人请帮帮我。感谢。
答案 0 :(得分:3)
你不想要否定你的条件:即
while (!(email != "@" && email != "."))
,通过应用De Morgan的法律简化为
while (email == "@" || email == ".")
但在我看来,这似乎是对有效性的不充分检查(例如,"@@"
肯定也是无效的)。考虑使用正则表达式库std::regex
&amp; c。来自C ++ 11,使用Google搜索“有效电子邮件地址的正则表达式”。
答案 1 :(得分:2)
没试过,但如果您使用的是C ++ 11,则可以使用std::regex
。
从gonjay's answer开始,您的代码可能类似于:
#include <regex>
using namespace std;
const regex pattern("(\\w+)(\\.|_)?(\\w*)@(\\w+)(\\.(\\w+))+");
cout << "Donor's Email: ";
cin >> email;
while (!regex_match(email, pattern)){
cout << "Please enter correct email format." << endl;
cout << "Donor's Email: ";
cin >> email;
}