如果所有输入都有效则打印总和,否则在 C++ 中打印 "Invalid"

print sum if all inputs are valid otherwise print "Invalid" in c++

问题是打印一个输入中所有整数的总和line.If任何输入都无效打印"Invalid"。 这是代码 --> C++ Code Link

代码的问题在于,如果 input > 9

,它不会产生输出

.我应该如何接近这里?

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

在您的代码的第 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)

在 for 循环中使用 unsigned 而不是 int 它将解决问题。 您正在将 i 与 is signed int 与 unsigned v.size().

进行比较

您正在尝试将 14 存储在 char 中,但这是行不通的!单个数字 (0,1,2,3,4,5,6,7,8,9) 一切都会好起来的,因为它们被视为单个字符,但是 14 包含两个字符,所以首先1 将添加到向量中,然后 4。所以,答案 11 是正确的,因为 1+2+3+1+4=11!您可以使用此解决方案: 或 strtok 替代方案来划分输入字符串并获取数字(在这种情况下,' ' 将是您的分隔符)或解析输入以另一种方式将数字存储在 int 变量中。

编辑:我看你还是不明白你必须做什么。修改我下面评论的link()的回复用了2分钟,解决了你的问题……下次,请多花点时间自己解决。

#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;
}