如果所有输入都有效则打印总和否则打印"无效"在c ++中

时间:2016-06-07 21:34:38

标签: c++ g++ stringstream

问题是在一个输入行中打印所有整数的总和。如果任何输入无效,则打印"无效"。 这是代码 - > C++ Code Link

代码的问题在于,如果输入>它不会产生输出。 9

。我该怎么办?

input : 1 2 3 14
output : 11 //which is wrong
input : 1 a 2 b
output : Invalid 

3 个答案:

答案 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/3185860strtok替代方法来划分输入字符串并获取数字(在这种情况下,' '将是您的分隔符)或解析输入另一种方法是将数字存储在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;
}