使用命令行将整数参数传递给C程序

时间:2013-07-30 23:10:02

标签: c scanf

经过多年的回归编程,目前正在摆弄一个简单版本的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;
} 

3 个答案:

答案 0 :(得分:8)

除了它的兄弟函数(printf,sprintf等)sscanf返回正确解析的参数数量 - 在这种情况下为1。您需要删除x和y的分配到sscanf

sscanf(argv[1], "%d", &x);
sscanf(argv[2], "%d", &y);

答案 1 :(得分:0)

您似乎正在为xy分配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