c ++的整数参数

时间:2011-02-09 23:57:39

标签: c++ arguments

我在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;
}

3 个答案:

答案 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