2010-12-09 8 views
1

Ich habe ein Programm in C geschrieben. Mein Zweck ist zu testen, wie "lange lange" Variablen arbeiten. Aber die Resulse verwöhnt mich.
Mein OS: WinXP
Mein Compiler: TCC (Tiny C Compiler) http://bellard.org/tcc/ Version 0.9.25
======== Mein Quellcode ========Wie man "lange lange" Variablen in C ein-/ausgibt und vergleicht?

# include "stdio.h" 
# include "math.h" 
void main() { 
long long n,i; 
scanf("%lld",&n); 
i=42; 
printf("\nn=%lld",n); 
printf("\ni=%lld",i); 
printf("\ni<=n --> %d",i<=n); 
return; 
} 

======== das Ende der Source Code =========
Führen Sie das Programm, I-Eingang:

30 

Dann ist der Ausgang:

n=30 
i=42 
i<=n --> 1 

Es bedeutet "i (42) ist kleiner als n (30)". Warum?
Gibt es irgendwelche Fehler, wenn ich eine lange lange Variable eingabe?
Können Sie mir den richtigen Weg zeigen?
Danke für Ihre Hilfe!

+0

Was passiert, wenn Sie nur n auf 30 setzen, statt es zu scannen? –

+0

Ich bekomme das erwartete "0" Ergebnis auf meinem Linux System mit GCC. Vielleicht ein tcc-Problem? – thkala

+0

Arbeitete für mich mit GCC 4.4. – birryree

Antwort

1

sollten Sie printf("%I64d", var)

+0

Nein, sollten Sie eine aktualisierte/feste Bibliothek oder abstrakt diese Bösartigkeit hinter einem Wrapper bekommen ... –

+0

Und scanf („% I64d“, & n) – DReJ

+0

Dank viel! Ich verstehe es! Ich sollte stattdessen printf ("% I64d", var) und scanf ("% I64d", & var) verwenden. Vielen Dank! – Favorites

2

Zuerst anrufen, schreiben Sie Ihre main() als

int main(void) { /* ... */ } 

Oder, wie

int main(int argc, char *argv) { /* ... */ } 

Und dann haben Sie wahrscheinlich eine besser Compiler benötigen.

+0

R .. ist richtig: Das ist kein Compiler, sondern eine libc Ausgabe ... – Christoph