char mot1[20 + 1] = {0};
char mot2[20 + 1] = {0};
char buffer[255 + 1] = {0};
int nb = 0;
FILE *file = NULL;
file = fopen(PATH, "r");
while (fgets(buffer, 255, file) != NULL) {
nb = sscanf(buffer, "%s %s", mot1, mot2);
printf("%s %s\n", mot1, mot2);
}
fclose(file)
Rockleader a écrit:D'accord mais dans cet exemple on sait que nb=2; mais il se peut que pour une ligne ce soit 2 et pour une autre 5. Il se peut que l'utilisateur voir le programmeur ne sache pas combien de mot seront contenus sur une ligne. Dans ce cas là le test ne peut se faire.
Pour l'ouverture du fichier ok; je l'ai aussi dans mon pseudo mémo du tp, mais je ne comprends pas ce que l'on teste quand on met NULL. NULL ce serait la fin du fichier ?
Autre chose dans cet exemple comment tu différencies par la suite mot1 de la première ligne et mot2 de la seconde ligne.
fgets() renvoient le pointeur s si elles
réussissent, et NULL en cas d'erreur, ou si la fin de
fichier est atteinte avant d'avoir pu lire au moins un
caractère.
Et enfin ultime question car c'est ainsi que c'est écrit dans mon sujet (comme tu l'as fait toi)
Pourquoi écrire mot1[20 + 1] au lieu de mot[21]
N'est ce pas la même chose ?
FILE *registre =NULL;
registre=fopen(LISTE,"r");
char pays[21] ={0};
char capi[21]={0};
int indi=0;
char buffer[256];
char paysCherche[21];
printf("Entrez un nom de pays (en majuscule) :\n");
scanf("%s",paysCherche);
char test='n'; while (fgets(buffer, 255, registre) != NULL)
{
sscanf(buffer, "%s %s %d", pays, capi, &indi);
if (paysCherche == pays)
{
test='o';
}
} if (test=='o') /*affichage résultat*/
{
printf("Le pays est dans la base de donnée\n");
}
else
{
printf("Le pays n'est pas dans la base de donnée\n");
}
fclose(registre);
}ampholyte a écrit:Tu oublies tout simplement qu'en langage C tu ne peux pas comparer 2 chaines de caractères de cette manière chaine1 == chaine2.
Tu as besoin d'utiliser la fonction strcmp(chaine1, chaine2) == 0 alors identique sinon différent (pour plus d'info je te laisse faire un man strcmp).
"y'en a qui ont eu des problèmes" !
#include char* fonction (void)
{
char* c=NULL; /*j'aurais pu mettre un c[]*/
printf("Chaine à traiter : ");
scanf("%s",c);
return c;
}
int main()
{
char* a=NULL;
*a=fonction();
printf("%s",a);
}#include
#include
#include
#define TBUFFER 1024
char* fonction (void) {
char* c=NULL; /*j'aurais pu mettre un c[]*/
c = calloc(TBUFFER + 1, sizeof(char));
if (c == NULL) {
printf("error : calloc : %s\n", strerror(errno));
return NULL;
}
printf("Chaine à traiter : ");
scanf("%s",c);
return c;
}
int main() {
char* a=NULL;
a=fonction();
if (a != NULL) {
printf("%s",a);
}
free(a);
a = NULL;
return 0;
}
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 5 invités
Tu pars déja ?
Identification
Pas encore inscrit ?
Ou identifiez-vous :