我是 C++ 的初学者程序员(目前),我有一个概念性问题。
我正在尝试过滤cin
输入以确保它是 01-04 之间的一位或两位整数,如果不是,则产生错误并要求新的输入。
我还map
用来给用户一个选项列表,在有效选择后,通过几种方法中的任何一种路由输入(整数)以产生相关结果,但我会在别处询问这个问题的更具体版本。
我在http://www.cplusplus.com/forum/beginner/26821/找到了一段代码,用于验证输入。我有点明白了,除了在while循环中设置布尔条件的地方。因为我不理解它,所以很难编辑或确保我正确地操作它。
这是示例代码:
int main()
{
int num;
bool valid = false;
while (!valid)
{
valid = true; //Assume the cin will be an integer.
cout << "Enter an integer value: " << endl;
cin >> num;
if(cin.fail()) //cin.fail() checks to see if the value in the cin
//stream is the correct type, if not it returns true,
//false otherwise.
{
cin.clear(); //This corrects the stream.
cin.ignore(); //This skips the left over stream data.
cout << "Please enter an Integer only." << endl;
valid = false; //The cin was not an integer so try again.
}
}
cout << "You entered: " << num << endl;
system("PAUSE");
return 0;
这是我的代码(整个事情,给出上下文)。我不认为它是完整的,我只是想确保我使用的是布尔值。
float _tmain(float argc, _TCHAR* argv[])
{
bool validInput = !true;
map<string,int> Operations;
Operations.insert(pair<string, int>("Addition", 01));
Operations.insert(pair<string, int>("Subtraction", 02));
Operations.insert(pair<string, int>("Multiplication", 03));
Operations.insert(pair<string, int>("Division", 04));
cout << "Welcome to OneOpCalc, what operation would you like to perform?" << endl;
for(map<string, int>::iterator ii=Operations.begin(); ii!=Operations.end(); ++ii)
{
cout << (*ii).second << ": " << (*ii).first << endl;
}
while (!validInput)
{
cin >> operatorSelection;
if (cin.fail() || operatorSelection < 4 || operatorSelection > 1)
{
cout << "Error: Invalid selection. Please choose a valid number." << endl << endl;
cin.clear();
cin.ignore();
}
}
}
while (!valid)
意思是“虽然valid
是假的” ?在我的脑海中,它在说“While valid
is !valid
”,这显然总是错误的。
编辑:谢谢大家的回答,我正在浏览它们。我不断得到的一个答案过于笼统;我明白那个 !不是,我理解使用它翻转布尔的概念。然而,隐含的逻辑含义让我感到困惑。在任何给定的陈述中,我习惯于将其!valid
视为一种翻转valid
价值的方式;不测试条件。这是使用它来测试欺骗我的条件的语法。换句话说,写作while(!valid)
对我来说字面意思是while(NOTvalid)
,而不是while(valid==false)
。我无法让自己理解为什么在这种情况下,!valid
将其视为一种条件,而不仅仅是一点点翻转。