Partage
  • Partager sur Facebook
  • Partager sur Twitter

Vérifier un code

Sujet résolu
    17 novembre 2022 à 0:55:22

    Bonjour, en veulent faire un programme qui affiche du texte selon t'elle demande ; j'ai voulu mettre une sorte de mot de passe pour accéder au programme, mais à chaque fois il me met mot de passe incorrecte alors qu'il est bon :

    #include <stdio.h>
    
    int main(int argc, char* argv[])
    {
    	char pass[9] = "";
    	char code[5] = "test\0";
    
    		printf("\nVeuillez ecrire votre code : ");
    		fgets(pass, 9, stdin);
    
    		if (pass == code)
    		{
    			printf("Code Correct");
    		}
    		else
    		{
    			printf("Code incorrect");
    			exit();
    		}
    	}

    Merci a se qui pourront d’aidée ^^

    -
    Edité par firisleny 17 novembre 2022 à 0:57:09

    • Partager sur Facebook
    • Partager sur Twitter
      17 novembre 2022 à 1:07:37

      Hello,

      Pour comparer deux chaines de caractères, on utlise (entre autres mais la plus courante) la fonction strcmp(). Toi, tu compares des adresses, qui sont évidemment différentes.

      -
      Edité par edgarjacobs 17 novembre 2022 à 1:08:44

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        17 novembre 2022 à 1:14:05

        Tu as deux problèmes.
        D'abord, fgets() n'enlève pas automatiquement la fin de ligne ('\n'). Tu dois le faire toi-même.
        Ensuite, ce n'est pas de cette façon qu'on compare deux chaînes. Il faut utiliser la fonction strcmp()
        Ici, tu compares les adresses des chaînes, pas les valeurs.

        Et moi, je ne rafraichit pas assez mon écran ...

        -
        Edité par PierrotLeFou 17 novembre 2022 à 1:15:46

        • Partager sur Facebook
        • Partager sur Twitter

        Le Tout est souvent plus grand que la somme de ses parties.

          18 novembre 2022 à 17:50:21

          PierrotLeFou a écrit:
          D'abord, fgets() n'enlève pas automatiquement la fin de ligne ('\n'). Tu dois le faire toi-même.

          j'ai refaire entierement mon code d'une autre manière qu'avec strcmp(), ça fonctionne donc bon ; par contre je comprend pas le problème avec fgets() ? moi sa na pas l'air de me mettre un /n :

          #include <stdio.h>
          
          int main(int argc, char* argv[])
          {
          	char pass[9] = "";
          	char code[5] = "test";
          	int i;
          
          		printf("\nVeuillez ecrire votre code : ");
          		fgets(pass, 9, stdin);
          
          		for (i = 0; code[i] == pass[i] && code[i] == '\0'; i++);
          
          		if (code[i] > pass[i])
          		{
          			printf("Code incorrect\n");
          			exit();
          		}
          		else if (code[i] < pass[i])
          		{
          			printf("Code incorrect\n");
          			exit();
          		}
          		else
          		{
          			printf("Bienvenue\n\n");
          		}
          	}

          le fgets() ne me pose pas vraiment problème ?



          • Partager sur Facebook
          • Partager sur Twitter
            18 novembre 2022 à 18:15:37

            La ligne suivante sera fausse dès la première valeur car le premier code n'est pas '\0'
                    for (i = 0; code[i] == pass[i] && code[i] == '\0'; i++);
            Note que le for se termine avec un ';'
            La condition suivant dit que les premiers caractères sont égaux, rien de plus.
            Il faut remplacer le '&&' par '||' dans le for.
            • Partager sur Facebook
            • Partager sur Twitter

            Le Tout est souvent plus grand que la somme de ses parties.

            Vérifier un code

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown