【问题标题】:C++ (negative verification is not workingC++(否定验证不起作用
【发布时间】:2019-10-20 19:56:11
【问题描述】:

测试 cin 的非数字、非零和非负值并进入循环。看不到为什么对值

cout << "Invalid value input\n";

提前感谢您发现可能是一个愚蠢的错误。

#include <iostream>
using namespace std;

int main()
{
    unsigned int integer;

    cout<< "Enter a non negative number greater than 0: ";
    cin>> integer;

    do
    {
         while(!cin || integer <= 0)//validation condition
         {
             cout << "Invalid value input\n";
             cin.clear();
             cin.ignore(200, '\n');
             cout<< "Enter a non negative number greater than 0: ";
             cin>> integer;
         }
         cout<< "Enter a non negative number greater than 0: ";
         cin>> integer;
    } while(integer !=1);

    return 0;
}

【问题讨论】:

  • 如果你只有一组“输入数字”,那就是do {输入数字,会更干净,如果不好就抱怨} while (不是1 );。但是,如果您想让它按原样工作,请准确解释它是如何不工作的。见How to Ask
  • 您输入的是负数吗?请注意,unsigned int 不能存储负值。在this question 中讨论了cin 在为unsigned 输入负数时是否应该失败。
  • integerunsigned int,这意味着它不能有负值。因此,如果您尝试给它一个负值,它将“环绕”并获得一个正值。如果你想要负值,你需要使用int integer;
  • 谢谢uneven_mark,这就行了。我将研究该线程以澄清它“失败”的原因。

标签: c++ do-while verification


【解决方案1】:

由于unsigned int integer;,它无法正常工作。
将此更改为 int 整数以检查否定验证。

unsigned int 值的范围是 0 到 4,294,967,295(4 个字节)
因此,无符号中的 -1 表示 4,294,967,295,因为 -1 位表示为 111~11(32 个一)

您可以检查2's Complement 的二进制位减法以及 -1 如何变为 2^32-1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多