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

How to properly use sscanf in this context?

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

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. 对于双倍,你需要使用%lf,而不是%f;在 scanfprintf 中。或者,您可以使用 float,它与 %f.

  2. 一起使用
  3. 你传递的是var1,2,3的地址;所以在 scanf 中再次获取地址是重复的——你将得到地址的地址。
    scanf.

  4. 中使用 var1 而不是 &var1