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 :

Message d'erreur imcompréhensible


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de tiotel
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 75
    Par défaut Message d'erreur imcompréhensible
    Bonjour a tout le monde,

    j'espère que vous allez tous bien.

    Je suis actuellement en train de coder un petit programme qui fait de l'ajout d'utilisateur dans un fichier.

    J'ai terminer mon code depuis deux bonnes heures mais je me prend maintenant la tête avec des erreurs de compilations que je ne comprend pas.

    Les erreurs sont les suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    adduser.c:12: error: expected ‘=’, ‘,’, ‘;’, ‘asmor ‘__attribute__’ before ‘checkUser’
    adduser.c:71: error: expected ‘=’, ‘,’, ‘;’, ‘asmor ‘__attribute__’ before ‘checkPassword’
    adduser.c: In function ‘main’:
    adduser.c:90: error: ‘bool’ undeclared (first use in this function)
    adduser.c:90: error: (Each undeclared identifier is reported only once
    adduser.c:90: error: for each function it appears in.)
    adduser.c:90: error: expected ‘;’ before ‘verifuser’
    adduser.c:91: error: expected ‘;’ before ‘verifpassword’
    adduser.c:103: error: ‘verifuser’ undeclared (first use in this function)
    adduser.c:105: error: ‘false’ undeclared (first use in this function)
    adduser.c:111: error: ‘verifpassword’ undeclared (first use in this function)
    adduser.c:130: warning: incompatible implicit declaration of built-in function ‘strcpy’
    adduser.c:131: warning: incompatible implicit declaration of built-in function ‘strcat’
    mon code est le suivant :

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    #include <stdio.h>
    #include <fcntl.h>
    #include <unistd.h>
    #define TAILLE_MAX 50;
     
    /*
    ** Fonction permettant de verifier si l'utilisateur est deja créer
    ** @Unuser : l'utilisateur à tester
    ** return true : L'utilisateur n'est pas présent
    ** return false : l'utilisateur est présent
    */
    bool checkUser(char *Unuser) 
    {
    	// on va ouvrir le fichier qui contient l'ensemble des utlisateurs
            FILE* fichier = NULL;
    	char chaine[TAILLE_MAX] = "";
    	char chaine2 [];
     
    	//contient une ligne du fichier
    	char lignefichier[40];
     
    	  fichier = fopen("user.txt", "r+");
     
    	  if (fichier != NULL)
    	  {
    		//on va parcourir le fichier
     
    		fgets(chaine, TAILLE_MAX, fichier);
     
    		//on va separer le login du mdp
     
    		char tab[2][20];
    		int j = 0;
     
    		do
    		{
        			int k = 0;
        			while(*c != ':' && *c) tab[j][k++] = *c++;
        			tab[j++][k] = 0;
    		} while(*c++);
     
    		//on teste les deux resultats
     
    		if(!strcmp(Unuser, tab[0]))
    		{
    		    return true;
    		}
    		else
    		{
    		    return false;
    		}
     
    		fclose(fichier); // On ferme le fichier qui a été ouvert        
        	  }
              else
    	  {
    		return true;
    	  }
     
    	return false;
     
    }
     
    /*
    ** Fonction permettant de verifier la concordance des mots de passe saisis
    ** @Password : Password à tester
    ** @Cpassword : Password saisie une seconde fois
    ** return true : bonne concordance 
    ** return false : ne corresponde pas
    */
    bool checkPassword(char *Password, char *Cpassword) 
    {
     
    	if(!strcmp(Password, Cpassword))
    	{
    	    return true;
    	}
     
    	return false;
     
    }
     
     
    int main(int argc,char *argv[])
    {
    	char User[20];
    	char Password[20];
    	char Cpassword[20];
     
    	bool verifuser;
    	bool verifpassword;
     
    	//va contenir la ligne à inserer dans le fichier	
    	char ligne[50];
     
    	//saisie de l'utilisateur	
    	do
    	{
     
    	printf("Veuillez saisir l'utilisateur à créer :");
    	scanf("%s",User);
     
    	verifuser = checkUser(User);
     
    	} while (verifuser == false);
     
    	//saisie du mot de passe
    	do
    	{
     
    	verifpassword = false;
     
    	printf("Veuillez le mot de passe de l'ulisateur :");
    	scanf("%s",Password);
     
    	printf("Confirmez le mot de passe de l'ulisateur :");
    	scanf("%s",Cpassword);
     
    	verifpassword = checkPassword(Password,Cpassword);
     
    	}while(verifpassword == false);
     
    	// on va ouvrir le fichier qui contient l'ensemble des utlisateurs
    	//si celui ci n'existe pas alors on le créer
            FILE* fichier = NULL;
            fichier = fopen("user.txt", "a+");
     
     	if (fichier != NULL)
    	{
    		strcpy(ligne, User);
    		strcat(ligne,":" );
    		strcat(ligne, Password);
    		strcat(ligne, "\n");
     
    		printf("%s\n",ligne);
     
    		//on insere la ligne dans le fichier
    		fputs(ligne, fichier);
    		fclose(fichier);
    	}
    	else
    	{
    		printf("erreur dans l'ouverture de fichier \n");
    	}
     
     
     
    	return 0;
    }
    Je vous remercie par avance

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    retire le ;

    il manque la taille du tableau.

    Il manque stdbool.h.

  3. #3
    Membre confirmé Avatar de tiotel
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 75
    Par défaut
    Bonjour,

    Merci pour les infos.

    cela fonctionne parfaitement.

    Maintenant j'ai un autre petit probleme et je ne voit pas la solution.

    La premiere execution du programme fonctionne parfaitement. C'est à dire lorsqu'il créer le fichier. Ensuite lors d'une nouvelle exécution , j'ai une boucle infinie qui m'indique que mon utilisateur est deja present dans la base

    Quelqu'un aurait une idée ?

    Merci d'avance


    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
     
    #include <stdio.h>
    #include <string.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <stdbool.h>
    #define TAILLE_MAX 50
     
    /*
    ** Fonction permettant de verifier si l'utilisateur est deja créer
    ** @Unuser : l'utilisateur à tester
    ** return true : L'utilisateur n'est pas présent
    ** return false : l'utilisateur est présent
    */
    bool checkUser(char *Unuser) 
    {
    	// on va ouvrir le fichier qui contient l'ensemble des utlisateurs
            FILE* fichier = NULL;
    	char chaine[TAILLE_MAX] = "";
     
    	//contient une ligne du fichier
    	char lignefichier[40];
     
    	  fichier = fopen("user.txt", "r");
     
    	  if (fichier != NULL)
    	  {
    		//on va parcourir le fichier
     
    		fgets(chaine, TAILLE_MAX, fichier);
     
    		//on va separer le login du mdp
    		char *c = chaine;
    		char tab[2][20];
    		int j = 0;
     
    		do
    		{
        			int k = 0;
        			while(*c != ':' && *c) tab[j][k++] = *c++;
        			tab[j++][k] = 0;
    		} while(*c++);
     
     		printf("%s \n",tab[0]);
    		printf("%s \n",Unuser);
     
    		if(!strcmp(Unuser, tab[0]))
    		{
     
    		    return true;
    		    fclose(fichier); // On ferme le fichier qui a été ouvert  
    		}
    		else
    		{
    		    printf("L'utilisateur existe déja \n");
    		    return false;
    		    fclose(fichier); // On ferme le fichier qui a été ouvert  
    		}
     
     
        	  }
              else
    	  {
    		printf("Premier utilisateur \n");
     
    		return true;
    	  }
    }
     
    /*
    ** Fonction permettant de verifier la concordance des mots de passe saisis
    ** @Password : Password à tester
    ** @Cpassword : Password saisie une seconde fois
    ** return true : bonne concordance 
    ** return false : ne corresponde pas
    */
    bool checkPassword(char *Password, char *Cpassword) 
    {
     
    	if(!strcmp(Password, Cpassword))
    	{
    	    return true;
    	}
    	else
    	{
    	    printf("Erreur de saisie dans les mots de passes \n");
    	    return false;
    	}
     
    	return false;
     
    }
     
     
    int main(int argc,char *argv[])
    {
    	char User[20];
    	char Password[20];
    	char Cpassword[20];
     
    	bool verifuser = false;
    	bool verifpassword = false;
     
    	//va contenir la ligne à inserer dans le fichier	
    	char ligne[50];
     
    	//saisie de l'utilisateur	
    	do
    	{
     
    	printf("Veuillez saisir l'utilisateur à créer :");
    	scanf("%s",User);
     
    	verifuser = checkUser(User);
     
    	} while (verifuser == false);
     
    	//saisie du mot de passe
    	do
    	{
     
    	verifpassword = false;
     
    	printf("Veuillez le mot de passe de l'ulisateur :");
    	scanf("%s",Password);
     
    	printf("Confirmez le mot de passe de l'ulisateur :");
    	scanf("%s",Cpassword);
     
    	verifpassword = checkPassword(Password,Cpassword);
     
    	}while(verifpassword == false);
     
    	// on va ouvrir le fichier qui contient l'ensemble des utlisateurs
    	//si celui ci n'existe pas alors on le créer
            FILE* fichier = NULL;
            fichier = fopen("user.txt", "a+");
     
     	if (fichier != NULL)
    	{
    		strcpy(ligne, User);
    		strcat(ligne,":" );
    		strcat(ligne, Password);
    		strcat(ligne, "\n");
     
    		printf("%s\n",ligne);
     
    		//on insere la ligne dans le fichier
    		fputs(ligne, fichier);
    		fclose(fichier);
    	}
    	else
    	{
    		printf("erreur dans l'ouverture de fichier \n");
    	}
     
     
     
    	return 0;
    }
    .

  4. #4
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par tiotel Voir le message
    La premiere execution du programme fonctionne parfaitement. C'est à dire lorsqu'il créer le fichier. Ensuite lors d'une nouvelle exécution , j'ai une boucle infinie qui m'indique que mon utilisateur est deja present dans la base

    Quelqu'un aurait une idée ?
    Mauvaise utilisation de strcmp(), cette fonction retourne 0 si les deux chaînes sont identiques et un nombre non nul dans le cas contraire.

    Or dans ton code tu as écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!strcmp(Unuser, tab[0]))
    ce qui est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(strcmp(Unuser, tab[0]) == 0)
    Tu retournes donc true si les chaînes sont égales et false dans le cas contraire, ce qui est exactement l'inverse de ce que tu cherches visiblement à faire.

    Un autre petit problème dans la vérification de l'existence de l'utilisateur : tu ne compares le nom du nouvel utilisateur qu'avec le no: du premier utilisateur présent dans le fichier et non avec tous les utilisateurs présent.

  5. #5
    Membre confirmé Avatar de tiotel
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 75
    Par défaut
    Merci Gl pour cette info.

    Cela fonctionne parfaitement.

    Petite question.

    Pour parcourir l'ensemble du fichier je vais rajouter la boucle suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while (fgets(chaine, TAILLE_MAX, fichier) != NULL)
    {
    }
    mais je suis septique car je ne vois pas comment cela fonctionner.

    Est ce que quelqu'un peut me dire si c'est bon ou bien, je m'egare

    Merci pour toute vos infos. On peut compter sur vous



    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    /*
    ** Fonction permettant de verifier si l'utilisateur est deja créer
    ** @Unuser : l'utilisateur à tester
    ** return true : L'utilisateur n'est pas présent
    ** return false : l'utilisateur est présent
    */
    bool checkUser(char *Unuser)
    {
        // on va ouvrir le fichier qui contient l'ensemble des utlisateurs
            FILE* fichier = NULL;
        char chaine[TAILLE_MAX] = "";
     
        //va contenir le resultat du test
        bool result = false;
     
        //contient une ligne du fichier
        char lignefichier[40];
     
          fichier = fopen("user.txt", "r");
     
          if (fichier != NULL)
          {
            //on va parcourir le fichier
     
          // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
              while (fgets(chaine, TAILLE_MAX, fichier) != NULL)
              {
     
            //on va separer le login du mdp
            char *c = chaine;
            char tab[2][20];
            int j = 0;
     
            do
            {
                    int k = 0;
                    while(*c != ':' && *c) tab[j][k++] = *c++;
                    tab[j++][k] = 0;
            } while(*c++);
     
            if(strcmp(Unuser, tab[0]))
            {
     
                return true;
     
            }
            else
            {
                printf("L'utilisateur existe déja \n");
                return false;
     
            }
           }
     
     
              }
              else
          {
            printf("Premier utilisateur \n");
            return  true;
          }
          fclose(fichier); // On ferme le fichier qui a été ouvert 
     
    }

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Pour parcourir l'ensemble du fichier je vais rajouter la boucle suivante :
    ...mais je suis septique car je ne vois pas comment cela fonctionner.
    Est ce que quelqu'un peut me dire si c'est bon ou bien, je m'egare
    C'est correct. fgets renverra NULL à la fin du fichier (ou si il y a une erreur de lecture)

Discussions similaires

  1. [TSocket] Message d'erreur
    Par rgz dans le forum Web & réseau
    Réponses: 6
    Dernier message: 04/07/2003, 09h16
  2. Surcharger le message d'erreur après un OnException
    Par Tirlibibi dans le forum XMLRAD
    Réponses: 2
    Dernier message: 24/04/2003, 11h42
  3. Réponses: 4
    Dernier message: 04/03/2003, 01h05
  4. [CR] Message d'erreur
    Par nono1 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 11/09/2002, 14h54
  5. Réponses: 2
    Dernier message: 27/05/2002, 19h46

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