我在C ++中有一种计算器应该在执行时接受参数。但是,当我输入7作为参数时,当放入变量时它可能会变成10354。这是我的代码:
#include "stdafx.h"
#include <iostream>
int main(int argc, int argv[])
{
using namespace std;
int a;
int b;
if(argc==3){
a=argv[1];
b=argv[2];
}
else{
cout << "Please enter a number:";
cin >> a;
cout << "Please enter another number:";
cin >> b;
}
cout << "Addition:" << a+b << endl;
cout << "Subtaction:" << a-b << endl;
cout << "Multiplycation:" << a*b << endl;
cout << "Division:" << static_cast<long double>(a)/b << endl;
system("pause");
return 0;
}
答案 0 :(得分:20)
你在哪里获得int argv[]
? main
的第二个参数是char* argv[]
。
您可以使用strtol
将这些命令行参数从字符串转换为整数,或使用strtod
将这些参数转换为浮点数。
例如:
a=strtol(argv[1], nullptr, 0);
b=strtol(argv[2], nullptr, 0);
但是你不能只改变参数类型,因为无论你喜欢与否,操作系统都会以字符串形式给你命令行参数。
注意:您必须#include <stdlib.h>
(或#include <cstdlib>
和using std::strtol;
)才能使用strtol
功能。
如果您想要进行错误检查,请使用strtol
代替atoi
。使用它几乎一样容易,它还为您提供指向字符串中解析终止的位置的指针。如果指向终止NUL,则解析成功。当然,您最好验证argc
以确保用户提供了足够的参数,并避免尝试从argv
读取缺少的参数。
错误检查示例:
char* endp;
a = strtol(argv[1], &endp, 0);
if (endp == argv[1] || *endp) { /* failed, handle error */ }
答案 1 :(得分:4)
函数签名是int main(int argc, char *argv[])
。 argv是一个字符串指针数组。
如果参数为7,则它将采用字符串形式(“7”)。使用atoi()
将其转换为数字7。
答案 2 :(得分:2)
主要的第二个参数应该是char* argv[]
或char** argv
。然后你必须将它们转换为int
。