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

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

本文关键字:打印 C++ Invalid 输入 有效 如果      更新时间:2023-10-16

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

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

.我应该如何处理这里?

输入 : 1 2 3 14输出 : 11//这是错误的输入 : 1 A 2 B输出:无效<</pre>
div class="answers">

在代码的第 16 行:

for(int i = 0 ; i < v.size() ; ++i)

您将 i (有符号整数)与无符号类型 size_tv.size() 进行比较。将int替换为size_t

for(size_t i = 0 ; i < v.size() ; ++i)

在 for 循环中使用unsigned而不是int,它将解决问题。您正在比较i与带有unsigned v.size()符号的 int 进行比较。

您正在尝试将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变量中。

编辑:我看到你仍然无法理解你必须做什么。从我在下面评论的链接(https://stackoverflow.com/a/1321175/3185860)修改响应以解决您的问题花了 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<<"Invalidn"; return 0;}
    else{
        for ( int i = 0; i < v.size(); i++ ) {
            sum = sum + v[i];
        }
    }
    cout<<sum<<'n';
    return 0;
}