Je dispose d'un fichier dont la structure est la suivante:Comment utiliser correctement sscanf dans ce contexte?
var1 2921
var2 0.5
var3 12
je besoin d'une méthode qui obtient le nom du fichier et 3 variables vides. Il devrait lire le fichier et donner une valeur pour chaque variable. (C'est ce que je l'ai essayé jusqu'à présent)
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++;
}
}
}
Et la principale:
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;
}
Sortie:
var1: 8
var2: 0,000000
v ar3: 2011837489
Pourquoi 'buf [strlen (buf) -1] = '\ 0';'? – qPCR4vir
Un problème est que vous ne cochez pas la valeur de retour de 'sscanf()' si vous ne savez pas quand il échoue. –
Une autre est que si 'fopen' échoue, vous déclarerez à partir de variables non initialisées, mais pas tell. –