问题是在一个输入行中打印所有整数的总和。如果任何输入无效打印“无效”。 这是代码 - 与代码>C++ Code Link打印总和,如果所有输入有效,否则在C++中打印“无效”
的问题是,它不一样,如果输入> 9
。如何,我应该接近这里产生输出?
input : 1 2 3 14 output : 11 //which is wrong input : 1 a 2 b output : Invalid
问题是在一个输入行中打印所有整数的总和。如果任何输入无效打印“无效”。 这是代码 - 与代码>C++ Code Link打印总和,如果所有输入有效,否则在C++中打印“无效”
的问题是,它不一样,如果输入> 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
的。通过size_t
更换int
:
for(size_t i = 0 ; i < v.size() ; ++i)
啊,是的!非常感谢。但是代码的问题在于,只有当输入是单个数字时才会产生输出。如果输入大于9,什么时候? –
@krishnakeshav如果您有其他问题,请发布一个新问题。 –
在for循环使用unsigned
,而不是int
,它会解决这个问题。 您正在比较i
与带符号int的unsigned v.size()
。
这也适用。但是,我宁愿使用'size_t'。 –
您正在尝试将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;
}
你能告诉我示例代码吗? –
看看我在答案中发布的链接。你将不得不将整个输入存储在一个字符串中(不是字符向量),然后按照链接所说的做,而不是' - ',你会得到'',并且当你找到一个数字时,将它转换为int并将其添加到总和中。 –
这个答案做你想做的:http://stackoverflow.com/a/1321175/3185860 –
请避免张贴链接到外部网站。编辑您的问题并将代码粘贴到您的问题中。 –
@BarmakShemirani告诉人们在这里粘贴代码通常会产生OT代码转储。最好告诉他们改为发布[mcve]。 –
你是什么意思'上面'输入给你一个编译错误?你在说什么?你如何定义有效的?你发布的输入编译得很好。 –