1

几年后回到编程,目前正在摆弄欧几里得算法的简单版本。如果我为程序中的整数赋值,它目前可以工作,所以我假设问题在于我如何从命令行传递整数。

任何帮助将不胜感激。

#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;
} 
4

3 回答 3

8

连同它的兄弟函数(printf、sprintf 等)一起sscanf返回正确解析的参数数量——在这种情况下为一个。您需要删除 x 和 y 到sscanf.

sscanf(argv[1], "%d", &x);
sscanf(argv[2], "%d", &y);
于 2013-07-30T23:18:12.613 回答
1

您可能希望完全避免使用 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

于 2013-07-31T01:22:46.927 回答
0

您似乎正在分配xy返回值sscanf,这意味着在它读取输入并将值存储到适当的变量之后,您将覆盖它们。尝试从这些行中删除x=和。y=

于 2013-07-30T23:18:02.190 回答