【发布时间】:2015-12-30 22:05:29
【问题描述】:
所以我想验证用户只输入文本而不是数字。如果输入了任何数字,那么我再次要求她输入。我认为这可以解决问题,但它似乎不起作用:
#include <iostream>
using namespace std;
int main()
{
string name = "";
cout << "Enter name: ";
getline(cin, name);
while (!cin) // or cin.fail()
{
cout << "Numbers are not allowed, input name again: ";
cin.clear();
cin.ignore(1000, '\n'); // is this even necessary since getline() already consumes spaces and new lines?
getline(cin, name);
}
}
因为name 变量是string 类型,所以cin 对象在收到数字时不应该失败吗?如何验证它并确保在输入数字时再次提示输入?另外,出于好奇,因为我已经问过了,如果用户输入类似:Scarlett9356,那么重新提示输入的好方法是什么?谢谢。
【问题讨论】:
-
您可以从输入流中将“1234”读取为数字或字符串:它只是一个字符串
-
这里真正困难的是大局。什么是一个人的有效名字?它比人们想象的要复杂得多:kalzumeus.com/2010/06/17/… 当然,对于一个玩具程序,确保它只包含 Aa-Zz 和空格通常就足够了。
-
精彩阅读,感谢分享! @ChristianHackl
标签: c++ validation io getline