2017-11-05 1 views
1

Ich muss überprüfen, wenn die Eingabe richtig gegeben ist, wie einige falsche Eingaben, wie 'b', -2, etc. werfen Heres mein einfacher Code, wie zu überprüfen es:Negative Anzahl Fehler beim Überprüfen der richtigen Eingabe von unsigned lange lange

#include <stdio.h> 

int main() 
{ 
    unsigned long long bigNumber; 
    if(scanf("%llu", &bigNumber) == 0) 
     printf("Input error!"); 
    else 
     printf("%llu\n", bigNumber); 

    return 0; 
} 

jedoch, wenn ich Eingang

-2 

ich diesen Ausgang bekam:

18446744073709551614 

was falsch ist, weil -2 ist kein unsigned long lang.

Als ich versuchte, die Eingangsbedingung zu ändern, auf

if((scanf("%llu", &bigNumber) == 0) || (bigNumber < 0)) 

suprisingly, bekam ich einen Übersetzungsfehler:

ex.c:6:52: error: comparison of unsigned expression < 0 is always false 
     [-Werror,-Wtautological-compare] 
     if((scanf("%llu", &bigNumber) == 0) || (bigNumber < 0)) 
               ~~~~~~~~~^~ 
1 error generated. 

Also, wie kann ich überprüfen, meine große Zahl richtig, wenn es muss eine ganze Zahl zwischen 0 - 10^19 sein?

+1

Eingabe als String (wie 'fgets') dann Überprüfen Sie, ob es mit' -' beginnt und dann 'sscanf' oder' strtoull' – BLUEPIXY

Antwort

0

Im C99-Standard ist der Eingabewert Minuszeichen optional. Wenn also ein Minuszeichen gelesen wird, treten keine Fehler auf und das Ergebnis ist das Zweierkomplement einer negativen Zahl, wahrscheinlich ein sehr großer Wert. (Wikipedia)

Sie müssen entweder eine vorzeichenbehaftete Nummer einlesen und gegen x < 0 überprüfen, oder den gelesenen Wert ohne Vorzeichen vor dem Vergleich in ein Vorzeichen umwandeln.