如果所有输入都有效则打印总和,否则在 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;
}
问题是打印一个输入中所有整数的总和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;
}