IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

programme C, tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 11
    Par défaut programme C, tableau
    Bonjour tout le monde, j’aimerai avoir votre aide concernant mon programme C. En fait
    Il s’agit d’écrire un programme qui demande à l’utilisateur son nom et son mot de passe ( à trois chiffres), seule la fonction connaît les noms et les mots de passe admis, on se limite à 4 noms et 4 mots de passe). En cas de non-concordance, le programme principal répondra: "Le mot de passe ne correspond pas au nom" et accordera encore deux essais.

    Je ne comprends pas pourquoi ca ne marche pas, quand j’introduis un mot, il m’affiche n’importe quoi, il ne me demande pas d’introduire le code à trois chiffre. Merci de votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #include <stdio.h>		
    #include <stdlib.h>	
    #include <string.h>
     
     
    int VerifMotPasse(const char * pNomLu, int codeLu);
     
    int main()
    {
    	const int nbEssaisMax = 3;
    	int nbEssais = 0;
    	char nomLu[12];
    	int codeLu;
    	int verifOk;
     
    	do
    	{
    		printf( "Votre nom (11 car. max) = ");
    		scanf("%c", &nomLu);
    		printf( "Votre code (3 chiffres max) = ");
    		scanf("%d", &codeLu);
    		nbEssais++;
    		verifOk = VerifMotPasse(nomLu, codeLu);
    		if (!verifOk)
    			printf( "Le mot de passe ne correspond pas au nom !" );
    			printf("\n");
    	} while (!verifOk && nbEssais < nbEssaisMax);
     
    	if (verifOk)
    		printf( "Bienvenue dans la suite du programme !");
    	else
    		printf( "Au revoir !");
    	printf("\n");
    	system("PAUSE");
    	return EXIT_SUCCESS;
    } // end main
     
    int VerifMotPasse(const char * pNomLu, int codeLu)
    {
    	int codeOk;
    	int nomTrouve;
    	const int maxNom = 4;
    	const int maxCar = 12;
    	char nom[4][12] = {"Toto", "Titi", "Marcel", "Théophile"};
    	int code[4] = {123, 312, 118, 114};
    	int i = 0; // indice pour la boucle
    	do
    	{
    		nomTrouve = strcmp(pNomLu, nom[i]) == 0;
    		if (!nomTrouve)
    			i++;
    	} while (!nomTrouve && i < maxNom);
    	// codeOk est VRAI si le nom est trouvé ET si le code correspond au nom
    	codeOk = nomTrouve && (codeLu == code[i]);
    	return codeOk;
    } // end VerifMotPasse

  2. #2
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut
    remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    scanf("%s", nomLu);
    le nom est une chaine de caracteres, scanf demande une adresse, or le nom (ici nomLu) d'une chaine de caractère est aussi un pointeur sur cette chaine (son adresse).

    %c c'est pour UN SEUL caractère.

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Par défaut
    Le probleme se trouve dans la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    scanf("%c",&nomLu);
    Il faut remplacer %c (qui designe un caractere) par %s qui designe un string (chaine de caractere). Et puis comme nous le savons,le nom d'un string est un pointeur sur la premiere case de la chaine,donc il ne faut pas mettre &.
    Resultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    scanf("%s",nomLu);

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 11
    Par défaut
    merci beaucoup à vous et dire que j'ai passé plusieurs heures sans voir, maintenant ça marche bien.

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut
    Citation Envoyé par abbaplatin Voir le message
    merci beaucoup à vous et dire que j'ai passé plusieurs heures sans voir, maintenant ça marche bien.

    avec un compilateur correctement configuré tu l'aurais vu tout de suite.

    http://emmanuel-delahaye.developpez....tm#cfg_compilo

    mais bon d'un autre côté le fais d'avoir passé des heures dessus est une bonne chose, la prochaine fois tu feras plus l'erreur

  6. #6
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    Si tu écris par exemple "Jean-Pierre" pour ton nom, ton scanf avec %c ne récupère que le J ... sans compter que le nom d'un tableau "est deja" une adresse.

    c'est %s qu'il faudrait utiliser. MAIS il est fortement déconseillé d'utiliser scanf pour des saisies (voir FAQ ).

    EDIT : personne n'aime le scanf ici, ça répond vite

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 11
    Par défaut
    moi je debute en programmation, tu aurais utilisé quoi à la place de scanf?

  8. #8
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Par défaut
    Tu peux utiliser la fonction gets() qui te permettera de stocker des noms contenant des espaces,chose qui n'est pas permise par scanf().
    Tu peux mettre :
    Bonne chance ^^

  9. #9
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    Citation Envoyé par DeViLGoRe
    Tu peux utiliser la fonction gets() qui te permettera de stocker des noms contenant des espaces,chose qui n'est pas permise par scanf().
    Tu peux mettre :
    Code :


    gets(nomLu);


    Bonne chance ^^
    Surtout pas !!!
    Pourquoi faut-il utiliser fgets() et non gets() ?

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 11
    Par défaut
    Ok merci pour la précision...

  11. #11
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. programmation de tableau en fortrant
    Par IlhemADEL dans le forum Fortran
    Réponses: 1
    Dernier message: 04/05/2013, 05h11
  2. Programmation de tableau
    Par jsdhh dans le forum Lotus Notes
    Réponses: 1
    Dernier message: 08/07/2012, 17h10
  3. programmer un tableau sous VB6
    Par aymane19 dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 23/04/2008, 19h58
  4. Definir la taille d'un tableau par programmation
    Par Manix dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/06/2005, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo