使用scanf读取双精度数据的分段错误

使用scanf读取双精度数据的分段错误,c,segmentation-fault,scanf,C,Segmentation Fault,Scanf,我正在为一个作业编写输入部分,如果命令行输入是一个输入,那么它应该接受键盘输入——其中一个输入不起作用 这是我遇到问题的代码段。如果行scanf(“%lf%lf”、&r1和&r2);如果不考虑它,它会产生一个分段错误-如果它被更改为写入另一个变量,那么一切都正常。我很难理解为什么是这个变量导致了问题,它是从上面的一行粘贴的,我将四个字符从k改为r,两个变量在同一行中声明!!请尽快帮助,在我解决这个问题之前,我无能为力。我尝试过将变量名更改为l1和l2,但当功能失调的行与功能行如此相似时,我想不出

我正在为一个作业编写输入部分,如果命令行输入是一个输入,那么它应该接受键盘输入——其中一个输入不起作用

这是我遇到问题的代码段。如果行scanf(“%lf%lf”、&r1和&r2);如果不考虑它,它会产生一个分段错误-如果它被更改为写入另一个变量,那么一切都正常。我很难理解为什么是这个变量导致了问题,它是从上面的一行粘贴的,我将四个字符从k改为r,两个变量在同一行中声明!!请尽快帮助,在我解决这个问题之前,我无能为力。我尝试过将变量名更改为l1和l2,但当功能失调的行与功能行如此相似时,我想不出还有什么其他方法可以做

    double  time[10000], x1[10000], x2[10000], v1[10000], v2[10000];
double  m1, m2, k1, k2, r1, r2, w1, w2;
int     count, inmethod;

time[0] = 0;
x1[0] = 0;  x2[0] = 10;
v1[0] = 0;  v2[0] = 0;
m1 = 5;     m2 = 5;
k1 = 5;     k2 = 5;
r1 = 5;     r2 = 10;
w1 = 0;     w2 = 0;

sscanf(argv[1], "%d", &inmethod);
//  printf("%d \n", inmethod);


if((argc == 2) && ((inmethod == 1) || (inmethod == 0)))
{
}

else
{
    printf("enter 1 for file input or 0 to enter input via the keyboard. you will be able to save your input for future use.\n");
    return(EXIT_FAILURE);
}

if(inmethod == 1)
{
    printf("system properties: \n");

    printf("please enter m1 then m2, seperated by a space and followed by enter\n");
    scanf("%lf %lf", &m1, &m2);

    printf("please enter k1 then k2, seperated by a space and followed by enter \n");
    scanf("%lf %lf", &k1, &k2);

    printf("please enter r1 then r2, seperated by a space and followed by enter \n");
    scanf("%lf %lf", &r1, &r2);

    printf("please enter w1 then w2, seperated by a space and followed by enter \n");
    scanf("%lf %lf", &w1, &w2);

    printf("initial conditions: \n");

    printf("please enter x1[0] then x2[0], seperated by a space and followed by enter \n");
    scanf("%lf %lf", &x1[0], &x2[0]);

    printf("please enter v1[0] then v2[0], seperated by a space and followed by enter \n");
    scanf("%lf %lf", &v1[0], &v2[0]);

}

你的代码看起来不错。它为我编译,运行良好


请检查您的输入值。scanf对于输入验证来说真的很弱,您需要检查函数返回并做好更坏的准备。如果您需要接受这样的键盘输入,请尝试使用gnu readline或具有更好输入功能的库。

如果您想将字符串转换为数字,就像使用
argv[1]
一样,那么您可能需要使用。在做之前,您可能还需要检查
argc
。对我有用。除第一个参数外,所有输入均为双精度输入。你在混吗。而且,在输入浮点数时?对于这些情况,
scanf
可能是最好的选择(当然也有)。我的意思是,当你将
argv[1]
转换为整数时,
sscanf
可能不是最好的。当我将你的代码复制粘贴到我的机器上时,它编译得很好。。。刚刚添加了一个要运行的main。你能举例说明你的输入吗?拼写提示:有一只老鼠在不同的地方。不检查scanf的返回值是在要求灾难。