经过多年的回归编程,目前正在摆弄一个简单版本的Euclid算法。如果我将值赋给程序中的整数,它当前有效,所以我假设问题在于我如何从命令行传递整数。
非常感谢任何帮助。
#include <stdio.h>
//Defining variables
int x,y, rem;
//Defining function gcd
int gcd(int x, int y);
//Where x>= y and y>=0
int main(int argc, char *argv[])
{
//Read in command line arguments
x= sscanf(argv[1], "%d", &x);
y= sscanf(argv[2], "%d", &y);
gcd(x,y);
}
//Define recursive gcd function
int gcd(int x, int y)
{
while(y !=0)
{
rem=x%y;
x=y;
y=rem;
gcd(x,y);
}
return x;
}
答案 0 :(得分:8)
除了它的兄弟函数(printf,sprintf等)sscanf
返回正确解析的参数数量 - 在这种情况下为1。您需要删除x和y的分配到sscanf
。
sscanf(argv[1], "%d", &x);
sscanf(argv[2], "%d", &y);
答案 1 :(得分:0)
您似乎正在为x
和y
分配sscanf
的返回值,这意味着在读取输入并将值存储到相应的变量之后,您就是覆盖他们。尝试从这些行中删除x=
和y=
。
答案 2 :(得分:0)
您可能希望完全避免使用sscanf()。函数atoi(),atof()和atol()是专门设计用于将字符串转换为数值的标准C库函数。例如,atoi()的原型“ascii to integer”如下:
#include <stdlib.h>
int atoi(const char *str);
这适用于您的代码:
x = atoi(argv[1]);
等。
请记住在程序开头的# include
stdlib.h标题。
以下是标准C库的合适参考的链接:http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.13.html#atoi