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

C++ program with command line arguments returning the wrong answer

本文关键字:程序 返回 错误 答案 参数 命令行 C++      更新时间:2023-10-16

我写了一个欧几里得算法的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

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

你总是在读取第一个参数(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]);