How can I **capture** an `unsigned` value without casting?

I am writing a simple program to calculate the LCF and the GCD of an array of numbers. In order to properly calculate them, the numbers should be always positive intergers, for I which chose the type "`unsigned long long int`". However, I still did not find a way to prevent the user to enter a negative value **without** casting.

Whenever I use `std::cin >> variable`, the program allows the user to enter a negative number. In case of unsigned values, the number will be the range-minus-value of the size of type. In case of `unsigned short` interger, if a user enters `-5`, the value stored in the variable will be `65.531`.

Here is the part of the code I am trying to improve:

```
#include<iostream>
#include<stdlib.h>
using namespace std;

typedef unsigned long long int ulli;

 /* many lines of code, variables already declared */

// array_list_of_numbers is of type UNsigned long long int
// var_verify_if_negative is of type signed long long int

    cout << "Please inform the numbers." << endl;
    for ( iterador1 = 0 ; iterador1 < size_of_the_list ; ++iterador1){
        cout << "Please, inform  number  "<< iterador1+1 << ": ";
        cin >> var_verify_if_negative;
        while (var_verify_if_negative <= 0){
            cout << "Number must be equal or greater than 1!" << endl;
            cout << "Try again: ";
            cin >> var_verify_if_negative;  
        /*end while*/}
        array_list_of_numbers[iterador1] = (ulli)var_verify_if_negative; // << here is the casting 
    /*end for*/}

```

However, if I use casting of a signed variable, there is no point of using unsigned data type at all. It would be better to declare the variables already as signed and perform the check.

The original code was:

```
cout << "Please inform the numbers." << endl;
    for ( iterador1 = 0 ; iterador1 < size_of_the_list ; ++iterador1){
        cout << "Please, inform  number  "<< iterador1+1 << ": ";
        cin >>  array_list_of_numbers[iterador1];
    /*end for*/}

```

Which allows wrong input.
How can I test if a user entered a signed value using `std::cin` ?