[C++] Problème de crash

lolpuppy -  
 lolpuppy -
Bonjour, j'ai 13 ans, je m'appelle Laurent et je commence le c++ et j'ai fais un programme (plutôt inutile) mais il plante. Il est supposé demandé de créer un compte si aucun n'est créé ou de se connecter. Tout marche bien pour la création et l'écriture dans les fichiers jusqu'a se que l'on se connecte où ça plante. J'espère trouver de l'aide ici.

Voici mon code
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <cstdlib>
#include <windows.h>

using namespace std;

int main()
{
    string pseudo,mdp;
    double nombre;
    string ligne;
    unsigned int nbUser(0);
    int autre(0);
    bool vrai;
    int save;

    ifstream Lid("texte.txt");
    //ifstream LnbUser("nb.txt");
    //ofstream EnbUser("nb.txt");

    if(Lid)
    {
        connection:
        while(getline(Lid, ligne))
        {
            nbUser++;
        }
        string user[nbUser];
        cout <<nbUser / 2;
        while(getline(Lid, ligne))
        {
            user[autre] = ligne; //Pernser a integrer Ceci a la boucle...
            autre++;
        }
       do
        {
            cout <<"Identifiant : ";
            cin >>pseudo;
            cout <<endl<<"Mdp : ";
            cin >>mdp;
            vrai = true;
            for(int i(0);vrai == true;i++)
            {
                if(user[i]== pseudo)
                {
                    save = i;
                    vrai = false;
                }

            }

        }while(user[save] != mdp);
    }
    else
    {
    cout << "Vous devez vous creer un identifiant."<<endl<<"Entrer un pseudo : ";
    cin >> pseudo;
    cout << "Entrer un mot de passe : ";
    cin >>mdp;
    ofstream Eid("texte.txt", ios::app);
    Eid <<pseudo<<endl; //Écriture dans les fichiers
    Eid <<mdp<<endl; //Écriture dans les fichiers
    goto connection;
    //LnbUser >> nombre;
    //nombre++;
    //EnbUser << nombre;

    }
    //system("cls");
    //system ("Pause");
    //Beep(597,100000);
    return 0;
}


PS.Ne prenez pas compte des commentaires de la fin et des #include inutile car je testait certaines fonction

Merci de votre (future) aide



1 réponse

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
int main()
{
    string pseudo,mdp;
    double nombre;
    string ligne;
    unsigned int nbUser=0;
    int autre=0; // les entier se définissent ainsi.
    bool vrai;
    int save;

    ifstream Lid("texte.txt");

    if(Lid)
    {
        connection:
        while(getline(Lid, ligne))
        {
            nbUser++;
        }
        string user[nbUser];
        cout <<nbUser / 2;
        while(getline(Lid, ligne)) // ne devrait rien donner, car Lid pointe en fin de fichier, il faut que tu remettes le pointeur de fichier au début avant de lire à nouveau.
        {
            user[autre] = ligne; //Pernser a integrer Ceci a la boucle...
            autre++;
        }
       do
        {
            cout <<"Identifiant : ";
            cin >>pseudo;
            cout <<endl<<"Mdp : ";
            cin >>mdp;
            save=-1;
            for(int i=0;i<nbUser;i++)Ici la condition de sortie la plus importante c'est i<nbUser, car si tu ne tapes pas un pseudo existant tu riques de sortir de ton tableau
            {
                if(user[i]== pseudo)
                {
                    save = i;
                    break;// sort de la boucle for
                }

            }

        }while(user[save] != mdp || save==-1);// j'ai ajouté la condition de continuer jusqu'à ce que tu saisisse un pseudo valable.
    }
    else
    {
     ...
    }
    return 0;
}

J'ai un peu modifier ton algorithme, de manière à ce qu'il soit plus classique. Le tiens n'était pas faux, mais incomplet avec un risque important de sortir du tableau user.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
je viens aussi de remarqué que tu ne sortira JAMAIS de ta boucle. Explique nous comment tu stockes mot de passe et pseudo.
0
Lolpupy
 
La premiere boucle du if est pour savoir combien d'utilisateur il y a et j'ai testé et elle sort, la seconde lit une ligne et la stoque dans un tableau ( On peut aussi faire avec des tableau dynamique)
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
je te parle de ta dernière boucle, celle en do while. Si user[i]==pseudo, alors save=i et tu compare user[save==i] avec mdp. Il est clair que user sera forcément différent de mdp.
0
lolpuppy
 
oops j'ai trouvé Ca vas etre user[save+1]
0
lolpuppy
 
Ça marche!!!!
0