2012-11-24 27 views
0

最近我試圖編寫一個代碼,在給定的n中搜索特定的數字。 代碼工作完美,但當我試圖插入n超過10位數字時,它真的很糟糕。C MVS輸入超過10位

顯然它與代碼無關,我只能插入超過10位數字。 我必須失去了一些東西......

比如這個簡單的代碼

#include <stdio.h> 

int main() 
{ 
    long int n; 

    scanf("%ld", &n); 

    printf("%ld", n); 

    return 0; 
} 

如果我餵它1111111111將打印同樣的事情監守其位數不足11 如果我試圖給它11111111111它會給我類似-1773790777 這是爲什麼發生在我身上?我在做什麼錯...

回答

1

我猜你是在一個32位的機器上,這意味着long int只有32位,這意味着它可以保持值在20至20億之間。當你嘗試輸入比這更多的值時,該值就打包了。

如果您的編譯器支持,您應該開始使用像long long int這樣的64位值。

+0

非常感謝的伴侶:D –

1

有符號整數的溢出是未定義的行爲。我認爲你的long int是4個字節,當你輸入一個更大的數字時,它會導致溢出。