使用scanf()的分段错误

时间:2018-10-24 15:32:07

标签: c pointers scanf point

下面的代码可以很好地编译,但是当我使用它时会返回分段错误。

我正在其他主题中搜索一些类似的错误,但没有发现太多。

以防万一,感谢您的帮助。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
double main( char *argv[]){
        FILE *ifp;
        double e,e_a,e_b,a,ct,b,sigma,tol;
        double Cla, theta;
        int n, nmax;

        ifp=fopen(argv[0],"r");
        scanf(ifp,"%lf %lf\n",&theta,&Cla);

        a=0.002;
        b=0.1;
        nmax=1000;
        ct=(a+b)/2;
        tol=0.00000001;

        sigma=0.14066;
        e_a=theta-(a*6/(sigma*Cla)+3/2*sqrt(a/2));
        e_b=theta-(b*6/(sigma*Cla)+3/2*sqrt(b/2));
        n=0;
}

1 个答案:

答案 0 :(得分:0)

这里有三个问题。首先

scanf(ifp,"%lf %lf\n",&theta,&Cla);

您似乎想使用scanf时正在呼叫fscanf

fscanf(ifp,"%lf %lf\n",&theta,&Cla);

第二个是您正在打开的文件:

ifp=fopen(argv[0],"r");

argv[0]是正在运行的可执行文件的名称,可能不是您想要的名称。如果要传递第一个参数,请使用argv[1]

ifp=fopen(argv[1],"r");

最后是main的定义:

double main( char *argv[]){

这不是有效的定义,因为它应该返回int并同时具有argcargv或都不具有:

int main( int argc, char *argv[]){

您还应该检查是否传递了一个参数:

if (argc < 2) {
    printf("missing argument\n");
    exit(1);
}