C++带有命令行参数的程序返回错误的答案
C++ program with command line arguments returning the wrong answer
我写了一个欧几里得算法的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]);
相关文章:
- 为什么这个程序返回最后一个单词而不是最长的单词?
- 当if语句告诉程序返回0时,我的程序不会退出
- 未知的错误导致程序返回怪异的符号
- 程序返回-1073741571而不是永远进行的值
- DLL – 在 DLL 初始化时填充的静态向量,向客户端程序返回零大小
- C - 程序返回值而无需返回语句
- C++线程中调用 std::terminate 时程序返回代码
- 为什么我的程序返回5
- 我如何在不关闭的情况下使这个简单的程序返回
- 用于获取以元音和辅音开头的单词数量的程序返回错误的答案
- 输入将为浮动价值,程序返回整个部分和小数值
- 为什么当我尝试计算平均绝对偏差时,我的程序返回 inf
- 对简单的帐户检查程序有问题?程序返回编译错误,指出"no match for 'operator||' unsure of how to fix?"
- 布尔程序返回错误,即使应该是正确的.简单程序
- 使用自定义删除程序返回unique_ptr的 nullptr 失败
- 如何将命令从c++应用程序返回到父终端
- C 程序返回默认值0
- glGetUniformLocation为所有程序返回相同的值
- 我的程序返回整数值,但即使在显式类型转换之后也应该给出双值
- 这是从信号处理程序返回值的可靠方法吗