C ++程序使用命令行参数返回错误的答案

时间:2014-09-13 19:15:42

标签: c++ algorithm command-line command-line-arguments

我编写了欧几里德算法的C ++实现,我想知道为什么在使用命令行参数时输出错误的答案。否则,它可以正常工作。

这是我的代码。

#include <iostream>
#include <sstream>

int gcd(int a, int b);

int main(int argc, char *argv[])
{   
    if(argc != 3){
        std::cout << "Usage: " << argv[0] << " a b" << std::endl;
        return 1;
    }   

    //Check to see if argv[1] is an integer 
    std::istringstream ss1(argv[1]);
    int a;
    if(!(ss1 >> a)){
        std::cout << "Invalid number " << argv[1] << std::endl;
        return 1;
    }

    //Check to see if argv[1] is an integer 
    std::istringstream ss2(argv[1]);
    int b;
    if(!(ss2 >> b)){
        std::cout << "Invalid number " << argv[1] << std::endl;
        return 1;
    }

    std::cout << gcd(a, b) << std::endl;
    return 0;
}   

//calculates the gcd of 2 integers
int gcd(int a, int b)
{
    return (b == 0) ? a : gcd(b, a % b);
}

这里我输入的是参数和输出。

gcd 6 7
6

gcd 90 10
90

正如您可能已经猜到的那样,程序只给出了我作为输出提供的第一个参数,但仅用于命令行参数。这是怎么回事?

1 个答案:

答案 0 :(得分:2)

您总是在阅读第一个参数(argv[1]),第二个参数(argv[2])未使用。使用您的代码,您a等于b,因此,首先拨打gcd(a,b)来电gcd(b,a%b) gcd(b,0),然后返回b。 ......等于a(如果你跟随)!

无论你的第二个参数是什么,程序总会返回第一个参数的值!

std::istringstream ss2(argv[1]);替换为std::istringstream ss2(argv[2]);