Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème condition if else

22 mai 2017 à 21:29:45

Bonjour, j'ai un problème avec une condition, j'aimerais que lorsque ce soit = 0, cela affiche le message et sinon, cela affiche l'autre message mais cela affiche la second message alors que la valeur est bien 0...

int i;
    memset(ligneTab[i].nom, 0, 50); 
    memset(ligneTab[i].prenom, 0, 50); 
    memset(ligneTab[i].CP_ville, 0, 50); 
    memset(ligneTab[i].titre_livre, 0, 50); 

Tout est initialisé à 0 ( apres la 1ere virgule )

Mais...:

int i;
    for(i=0; i<15; i++)
    {
        if(ligneTab[i].nom == 0 )
        {
            printf(" AH...Pas de nom -"); // Cela met /
        }

        else
        {
            printf("Test %s -",ligneTab[i].nom); // Sinon, affiche les noms
        }
    }
printf("\n");


    for(i=0; i<15; i++)
    {
        if(ligneTab[i].prenom != 0)
        {
            printf(" %s -",ligneTab[i].prenom); // Sinon, affiche les prenoms
        }

        else
        {
            printf(" Pas de prenom -"); // Cela met /
        }

    }
printf("\n");


    for(i=0; i<15; i++)
    {
        if(ligneTab[i].CP_ville != 0)
        {
            printf(" %d -",ligneTab[i].CP_ville); // Sinon, affiche les codes postales de ville
        }

        else
        {
            printf(" Pas de CP -"); // Cela met /
        }
    }
printf("\n");


    for(i=0; i<15; i++)
    {
        if(ligneTab[i].titre_livre != 0)
        {
            printf(" %s -",ligneTab[i].titre_livre); // Sinon, affiche les noms
        }

        else
        {
            printf(" Pas de titre -"); // Cela met /
        }
    }
printf("\n");
}

Seul la condition de Code postal fonctionne comme il faut...


  • Partager sur Facebook
  • Partager sur Twitter
22 mai 2017 à 22:39:07

Yop,

if(ligneTab[i].nom == 0 )

Si ligneTab[i].nom est une chaîne de caractères, alors tu compares une adresse avec 0. Mais tu veux comparer le contenu des chaînes avec 0, c'est bien ça ?

  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2017 à 1:26:18

WilliamVanHaute a écrit:

Bonjour, j'ai un problème avec une condition, j'aimerais que lorsque ce soit = 0, cela affiche le message et sinon, cela affiche l'autre message mais cela affiche la second message alors que la valeur est bien 0...

    memset(ligneTab[i].nom, 0, 50); 

Tout est initialisé à 0 ( apres la 1ere virgule )

Non, pas tout, seulement ce qui est pointé par ligneTab[i].nom. Mais ligneTab[i].nom conserve sa valeur.

  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2017 à 12:38:53

int i;
    memset(ligneTab[i].nom, 0, 50); 
    memset(ligneTab[i].prenom, 0, 50); 
    memset(ligneTab[i].CP_ville, 0, 50); 
    memset(ligneTab[i].titre_livre, 0, 50); 

Tu as oublié d'initialiser i, tu set à 0 de la mémoire plus ou moins aléatoirement.

Ensuite, qu'est ce que ligneTab ? Un tableau de 15 structures qui contiennent 4 chaînes de caractères à priori. Quand bien même i serait à 0, tu ne ferais qu'initialiser qu'une des 15 structures. Enfin, je suppose que tu confonds ligneTab[i].nom avec ligneTab[i].nom[0]

-
Edité par Niwyll 23 mai 2017 à 12:39:33

  • Partager sur Facebook
  • Partager sur Twitter
Et Java créa le -jar Binks.jar
23 mai 2017 à 15:17:23

Je dois donc faire une boucle pour initialiser i ?

Voici ligneTab :

struct
{
    int ID;
    char nom[50];
    char prenom[50];
    char titre_livre[50];
    int CP_ville;

}ligneTab[15];

Gam' : Ce que je veux faire c'est que si ligneTab[i].nom est vide alors cela effectue ce qu'il y a entre les acollades.

  • Partager sur Facebook
  • Partager sur Twitter