2010-03-21 60 views
0

我是C初學者,使用Turbo C++編譯器(16位)。長整型問題

在我寫的軟件中,最大的答案是32000左右。如果我想要一個比這更大的數字,我使用long int

如果我執行下面的程序:

#include <stdio.h> 
void main() 
{ 
    long int x; 
    x=40000; 
    printf("%d", x); 
} 

然後我得到一個錯誤的常數值在功能main()長。

我怎樣才能得到更多的答案32000和擺脫這個錯誤? 也正常我將%d改爲%ld並使用40000L bt當我使用無符號整數,那麼我也需要使用40000 //'?'。

+6

爲什麼使用turbo C++?有許多更好,免費的C和C++編譯器,它們將支持32位和更大的整數。 – 2010-03-21 11:37:31

+0

目前m使用它!想要切換到其他人的 ! – Kraken 2010-03-21 11:38:28

+1

我總是說應該有一個turbo-C++標籤,它一定會每年出現一次左右。 – 2010-03-21 12:19:52

回答

6

在printf中爲long int使用%ld。 %d是int,在你的編譯器中只有16位。對於錯誤消息,請使用x = 40000L。

+0

所以每個tym我需要使用'L'? 即使我使用unsigne長整數? 還是隻是長整型? – Kraken 2010-03-21 11:47:31

+0

這是很長的int。對於未簽名的longs,使用40000UL。更好的是,使用已經建議的另一個編譯器。並瞭解不同的整數類型,有符號和無符號,保證位數,提升規則以及所有相關的東西,如printf格式說明符。 – Secure 2010-03-21 11:55:35

0

將long更改爲無符號,40000將適合unsigned int。

+0

bt長是什麼問題? – Kraken 2010-03-21 11:42:57

+0

您指定了「long int x」,並將int的默認大小與「%d」一起指定爲16位,這是因爲如果您將long的值設置爲70000並嘗試使用%d打印它會忽略高16位顯示4464而不是70000. – 2010-03-21 12:17:25

0

假設你在windows上,最好的解決方案是以32或64位平臺爲目標。 16位程序甚至不會在64位版本的Windows上運行;你應該真的升級。

微軟有一個免費版本的Visual Studio:Visual C++ Express Edition。這也是一個很好的選擇,因爲它帶有一個完整的IDE。

Gcc也可用於Mingw形式的窗口。不幸的是,mingw本身並沒有發佈隨時可用的編譯器,但是其他的卻可以,比如equation.comTDM

0

或許刷上variadic formatting可能會有所幫助:)當你(或者printf()子系統)實際上擴展到variadic arguments時,它假設你知道它們是什麼類型。

這不僅適用於printf,也適用於討論printf時使用va _ *()或v * printf()的任何其他函數。不要忘記你的類型。

此外,跟蹤signedness以避免意外的結果。

換句話說,當你調用printf()或其他任何接受elipsis的東西時,請確定你傳遞的是什麼。這不僅限於printf(),事實上冒險超出了這一點通常不會產生編譯器警告。