这是我的代码:
#include <iostream>
using namespace std;
int main (int argc, char* argv[])
{
int frstNumb = atoi (argv[1]);
int scndNumb = atoi (argv[2]);
int sum = 0;
sum = frstNumb + scndNumb;
}
好的,现在它正在为整数工作。我该怎么办呢?我的参数中有“2.5和1.2”?该程序不会计算这种数字。帮助
由于
答案 0 :(得分:5)
参数始终作为字符串传递。首先,将主函数声明更改为
int main (int argc, char* argv[])
请注意,main的返回值必须为int,否则为非标准。
第二次将argv[1]
和argv[2]
转换为atoi
的整数,根据我的口味,这有点C-ish,尽管最简单,或boost::lexical_cast
e.g。
int i1 = atoi(argv[1]); //#include <cstdlib>
int i1 = boost::lexical_cast<int>(argv[1]); //#include <boost/lexical_cast.hpp>
答案 1 :(得分:2)
argv[1]
和argv[2]
是字符串。当您执行总和时,请使用atoi()
调用对它们进行包装,以便对它们进行解析并转换为整数。
感谢Mark Loeser和walkingTarget
您对main()
的声明应该是:
int main(int argc, char **argv)
或
int main(int argc, char *argv[])
main()
应始终返回int
,而argv
始终应为字符串数组。
答案 2 :(得分:2)
是的 - 你想要atoi()
。
int frstNumb = atoi(argv[1]);
int scndNumb = atoi(argv[2]);
我建议谷歌搜索atoi()
以了解它是如何工作的,它可能会在将来帮助你。
答案 3 :(得分:1)
正如其他答案中所建议的,您首先需要更改函数声明main
- argc
表示传递给它的参数总数,argv
是一个参数数组本身(每个argument是数组中的元素; first element - argv[0]
- 是执行二进制文件的路径!argv[1]
实际上是命令行的第一个参数。)
在C和C ++中,您都可以使用atoi
或sscanf
函数,但在C ++中,您应该利用STL stringstream
的转换功能:
#include <iostream>
#include <sstream>
using namespace std;
int main(int argc, char* argv[])
{
if(argc != 3)
{
cerr << "Invalid number of operands" << endl;
return 1;
}
int n1 = 0;
int n2 = 0;
stringstream ss;
ss << argv[1];
ss >> n1;
ss.clear();
ss << argv[2];
ss >> n2;
int sum = n1 + n2;
return 0;
}