作者yongb (蓝海悦)
看板C_and_CPP
标题[问题] C++ string 奇怪错误
时间Wed Dec 2 00:31:16 2015
开发平台(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://webptt.com/cn.aspx?n=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
1F:推 LPH66: (1) 它给警告, 所以编译依然能过且可以执行, 但结果不一定 12/02 00:42
2F:→ LPH66: 是你想要的 12/02 00:42
3F:→ LPH66: (2) 这警告在讲你把一个有号数跟无号数做比较了 12/02 00:42
4F:→ LPH66: 问题在於有号跟无号数对某些位元组合的比较规则不同 12/02 00:43
5F:→ LPH66: 准确来说是那些有号数为负数的组合, 有号数要当负的看 12/02 00:43
6F:→ LPH66: 但无号数要当正的看, 所以编译器搞不懂你要怎麽比 12/02 00:44
7F:→ LPH66: (3) 但编译器还是会猜一个用, 我不太肯定细节但应该是把 12/02 00:45
8F:→ LPH66: 有号升级成无号来比, 这里对那些组合就有一些微妙之处 12/02 00:45
9F:→ LPH66: (4) 所以这里正确用法是把 i 改宣告为无号型态 12/02 00:45
10F:→ LPH66: 最正确的用法是 size_t, 不过 unsigned int 也是可以 12/02 00:46
11F:→ LPH66: size_t 是标准规定用来表示东西大小的值, 是无号型态 12/02 00:47
原来如此阿,感谢大大,真的解释非常清楚,真的学到了
马上就来实际测试看看
12F:→ Caesar08: 这排版... 有点神奇 12/02 00:59
大大是说程式码吗?抱歉,伤了你们的眼睛xD
13F:→ TobyH4cker: 所以说罗... 12/02 08:05
※ 编辑: yongb (114.46.91.60), 12/02/2015 13:27:06