C ++ (отрицательная проверка не работает - PullRequest
1 голос
/ 20 октября 2019

Тестирование cin для нечисловых, ненулевых и неотрицательных значений и входной цикл. Не могу понять, почему тест на значения <= 0 порция не работает. он должен вывести: </p>

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;
}

1 Ответ

1 голос
/ 21 октября 2019

Это не работает из-за unsigned int integer;.
Изменение этого значения на целое число int для проверки на отрицательную проверку.

Диапазон значений беззнакового целого числа от 0 до 4 294 967 295 (4 байта)
То есть -1 в беззнаковом значении 4 294 967 295 в качестве -1-битного представления составляет 111 ~ 11 (32 единицы)

Вы можете проверить 2 Complement для двоичного вычитания битов и того, как -1 стало 2 ^ 32-1

...