如何在这种情况下正确使用 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
对于双倍,你需要使用%lf
,而不是%f
;在 scanf
和 printf
中。或者,您可以使用 float
,它与 %f
.
一起使用
你传递的是var1,2,3的地址;所以在 scanf 中再次获取地址是重复的——你将得到地址的地址。
在 scanf
.
中使用 var1
而不是 &var1
我有一个文件,其结构如下:
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
对于双倍,你需要使用
%lf
,而不是%f
;在scanf
和printf
中。或者,您可以使用float
,它与%f
. 一起使用
你传递的是var1,2,3的地址;所以在 scanf 中再次获取地址是重复的——你将得到地址的地址。
在scanf
. 中使用
var1
而不是 &var1