[問題] C++ string 奇怪錯誤

看板C_and_CPP作者 (藍海悅)時間9年前發表 (2015/12/01 16:31), 9年前編輯推噓1(1012)
留言13則, 3人參與, 最新討論串1/1
開發平台(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

12/02 00:42, , 1F
(1) 它給警告, 所以編譯依然能過且可以執行, 但結果不一定
12/02 00:42, 1F

12/02 00:42, , 2F
是你想要的
12/02 00:42, 2F

12/02 00:42, , 3F
(2) 這警告在講你把一個有號數跟無號數做比較了
12/02 00:42, 3F

12/02 00:43, , 4F
問題在於有號跟無號數對某些位元組合的比較規則不同
12/02 00:43, 4F

12/02 00:43, , 5F
準確來說是那些有號數為負數的組合, 有號數要當負的看
12/02 00:43, 5F

12/02 00:44, , 6F
但無號數要當正的看, 所以編譯器搞不懂你要怎麼比
12/02 00:44, 6F

12/02 00:45, , 7F
(3) 但編譯器還是會猜一個用, 我不太肯定細節但應該是把
12/02 00:45, 7F

12/02 00:45, , 8F
有號升級成無號來比, 這裡對那些組合就有一些微妙之處
12/02 00:45, 8F

12/02 00:45, , 9F
(4) 所以這裡正確用法是把 i 改宣告為無號型態
12/02 00:45, 9F

12/02 00:46, , 10F
最正確的用法是 size_t, 不過 unsigned int 也是可以
12/02 00:46, 10F

12/02 00:47, , 11F
size_t 是標準規定用來表示東西大小的值, 是無號型態
12/02 00:47, 11F
原來如此阿,感謝大大,真的解釋非常清楚,真的學到了 馬上就來實際測試看看

12/02 00:59, , 12F
這排版... 有點神奇
12/02 00:59, 12F
大大是說程式碼嗎?抱歉,傷了你們的眼睛xD

12/02 08:05, , 13F
所以說囉...
12/02 08:05, 13F
※ 編輯: yongb (114.46.91.60), 12/02/2015 13:27:06
文章代碼(AID): #1MNSjNfA (C_and_CPP)