如何在这种情况下正确使用sscanf?

时间:2017-06-03 16:47:25

标签: c scanf stdio

我有一个文件,其结构如下:

var1 2921
var2 0.5
var3 12

我需要一个方法来获取文件的名称和3个空变量。它应该读取文件并为每个变量赋予值。 (这是我到目前为止所尝试过的)

void get_input(char * filename, int * var1, double * var2, int * var3){
    FILE *file;
    char buf[1024];
    file=fopen(filename,"r");
    if(file == NULL){
        printf("ERROR");
        exit(0);
    }

    int i=0;

    if(file){
        while(fgets(buf,sizeof(buf),file)!=NULL){    
            switch(i){
            case 0:
                sscanf(buf,"var1 %d",&var1);
                break;
            case 1:
                sscanf(buf,"var2 %f",&var2);
                break;
            case 2:
                sscanf(buf,"var3 %d",&var3);
                break;
            default:
                break;
            }

            i++;
        }
    }
}

main

int main()
{
    char filename[256];
    int var1,var3;
    double var2;

    snprintf(filename,256,"file.txt");

    get_input(filename,&var1,&var2,&var3);

    printf("%s %d","var1: ",var1);
    printf("%s %f","\nvar2: ",var2);
    printf("%s %d","\nvar3: ",var3);

    return 0;
}

输出:

  

var1:8

     

var2:0.000000

     

var3:2011837489

1 个答案:

答案 0 :(得分:3)

  1. 对于double,您需要使用%lf,而不是%f;在scanf以及printf中。或者,您可以使用float%f

  2. 您正在传递var1,2,3的地址;因此,在scanf中再次获取地址是重复的 - 您将获得该地址的地址 在var1

  3. 中使用&var1代替scanf