问题是在一个输入行中打印所有整数的总和。如果任何输入无效,则打印"无效"。 这是代码 - > C++ Code Link
代码的问题在于,如果输入>它不会产生输出。 9
。我该怎么办?
input : 1 2 3 14 output : 11 //which is wrong input : 1 a 2 b output : Invalid
答案 0 :(得分:1)
代码的第16行:
for(int i = 0 ; i < v.size() ; ++i)
您将i
(有符号整数)与v.size()
进行比较,后者属于无符号类型size_t
。将int
替换为size_t
:
for(size_t i = 0 ; i < v.size() ; ++i)
答案 1 :(得分:0)
在for循环中使用unsigned
代替int
,它将解决问题。
您正在将i
与已签名的int与unsigned v.size()
进行比较。
答案 2 :(得分:0)
您正试图将14
存储在char
中,但这不起作用!一位数字(0,1,2,3,4,5,6,7,8,9)一切都会好的,因为它们被视为单个字符,但14
包含两个字符,所以首先1
将添加到向量中,然后4
。所以,答案11是正确的,因为1 + 2 + 3 + 1 + 4 = 11!您可以使用此解决方案:https://stackoverflow.com/a/289372/3185860或strtok
替代方法来划分输入字符串并获取数字(在这种情况下,' '
将是您的分隔符)或解析输入另一种方法是将数字存储在int
变量中。
编辑:我发现你仍然无法理解你必须做的事情。我花了2分钟来修改我在下面评论的链接(https://stackoverflow.com/a/1321175/3185860)的响应,以解决您的问题......下次,请花更多时间尝试自己解决。
#include <string>
#include <vector>
#include <sstream>
#include <iostream>
using namespace std;
size_t ReadNumbers( const string & s, vector <int> & v ) {
istringstream is( s );
int n;
for(int i=0; i<s.size(); i++) if(isalpha(s[i]) && s[i]!=' ') return 0;
while( is >> n ) {
v.push_back( n );
}
return v.size();
}
int main() {
int sum=0;
string s;
vector <int> v;
getline( cin, s );
ReadNumbers( s, v );
if(v.size()==0){ cout<<"Invalid\n"; return 0;}
else{
for ( int i = 0; i < v.size(); i++ ) {
sum = sum + v[i];
}
}
cout<<sum<<'\n';
return 0;
}