看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) ubuntu g++4.8.4 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 剛在刷UVA 10929 程式碼看了很久都不知道錯在哪 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): UVA10929.cpp: In function ‘int main()’: UVA10929.cpp:14:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(int i=0;i<s.size();i++) ^ 程式碼(Code):(請善用置底文網頁, 記得排版) #include<iostream> #include<string> using namespace std; int main() { string s; while(cin>>s && s!="0") { long long int sum[2]={0,0}; /*cout<<s.size()<<endl; 這行是我再出錯的時候註解掉以下程式碼測試用的 意外的是這樣子編譯就可以通過 */ for(int i=0;i<s.size();i++) sum[i%2]+=s[i]-'0'; cout<<s<<"is"<<((sum[0]-sum[1])%11?"not":" "); cout <<"a multiple of 11." << endl; } return 0; } 補充說明(Supplement): 編譯錯誤,但我丟UVA居然AC了....冏 UVA G++ 版本是4.8.2 我編譯所用的指令是 $ g++ -g -Wall UVA10929.cpp -o UVA10929 是編譯器的問題嗎 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.165.149.139 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1448987479.A.A4A.html ※ 編輯: yongb (1.165.149.139), 12/02/2015 00:32:02 ※ 編輯: yongb (1.165.149.139), 12/02/2015 00:32:46
LPH66: (1) 它給警告, 所以編譯依然能過且可以執行, 但結果不一定 12/02 00:42
LPH66: 是你想要的 12/02 00:42
LPH66: (2) 這警告在講你把一個有號數跟無號數做比較了 12/02 00:42
LPH66: 問題在於有號跟無號數對某些位元組合的比較規則不同 12/02 00:43
LPH66: 準確來說是那些有號數為負數的組合, 有號數要當負的看 12/02 00:43
LPH66: 但無號數要當正的看, 所以編譯器搞不懂你要怎麼比 12/02 00:44
LPH66: (3) 但編譯器還是會猜一個用, 我不太肯定細節但應該是把 12/02 00:45
LPH66: 有號升級成無號來比, 這裡對那些組合就有一些微妙之處 12/02 00:45
LPH66: (4) 所以這裡正確用法是把 i 改宣告為無號型態 12/02 00:45
LPH66: 最正確的用法是 size_t, 不過 unsigned int 也是可以 12/02 00:46
LPH66: size_t 是標準規定用來表示東西大小的值, 是無號型態 12/02 00:47
原來如此阿,感謝大大,真的解釋非常清楚,真的學到了 馬上就來實際測試看看
Caesar08: 這排版... 有點神奇 12/02 00:59
大大是說程式碼嗎?抱歉,傷了你們的眼睛xD
TobyH4cker: 所以說囉... 12/02 08:05
※ 編輯: yongb (114.46.91.60), 12/02/2015 13:27:06