我编写了欧几里德算法的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
正如您可能已经猜到的那样,程序只给出了我作为输出提供的第一个参数,但仅用于命令行参数。这是怎么回事?
答案 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]);