C++ Problème de Crash

Fermé
lolpuppy - 20 nov. 2011 à 03:18
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 - 20 nov. 2011 à 12:15
Bonjour, quand je compile mon code, quand j'arrive a ma boucle la console crash. Je viens de penser a ajouter des guillemets dans ma fonction. Je compile avec Code::Blocks


Exemple : Avant
if (aleatoire == 1)
    {
        retour == (a);
        return retour;
    }


Après
if (aleatoire == 1)
    {
        retour == ("a");
        return retour;
    }


Mon main

#include "minuscule.h"
#include <iostream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
    string type;
    int nbDeChar(0);


    cout << "Ceci est un generateur de mot de passe !" << endl;
    cout << "Comment voulez-vous votre mot de passe"<<endl<<"minuscule" <<endl<<"MAJUSCULE" << endl <<"Les Deux"<<endl;
    cin >>type;
    do
    {
    cout << "Combien de caractere votre mot de passe doit-it contenir ? (128 Max.)"<<endl ;
    cin >>nbDeChar;
    }while(nbDeChar > 128);
    string tableau[nbDeChar];
    for (int i(0);i < nbDeChar; i++)
    {
        tableau[i] = minuscule();
        cout<<tableau[i];
    }
    return 0;
}


ma fonction minuscule
#include "minuscule.h"
#include <iostream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <vector>

std::string minuscule()
{
    int aleatoire(0);
    std::string retour;
    std::string a(a);
    std::string b(b);
    std::string c(c);
    std::string d(d);
    std::string e(e);
    std::string f(f);
    std::string g(g);
    std::string h(h);
    std::string i(i);
    std::string j(j);
    std::string k(k);
    std::string l(l);
    std::string m(m);
    std::string n(n);
    std::string o(o);
    std::string p(p);
    std::string q(q);
    std::string r(r);
    std::string s(s);
    std::string t(t);
    std::string u(u);
    std::string v(v);
    std::string w(w);
    std::string x(x);
    std::string y(y);
    std::string z(z);


    srand(time(NULL));
    aleatoire = (rand() % (26 - 1 + 1)) + 1;


    if (aleatoire == 1)
    {
        retour == (a);
        return retour;
    }
    else if (aleatoire == 2)
    {
        retour == (b);
        return b;
    }
    else if (aleatoire == 3)
    {
        retour == (c);
        return c;
    }
    else if (aleatoire == 4)
    {
        retour == (d);
        return d;
    }
    else if (aleatoire == 5)
    {
        retour == (e);
        return e;
    }
    else if (aleatoire == 6)
    {
        retour == (f);
        return f;
    }
    else if (aleatoire == 7)
    {
        retour == (g);
        return g;
    }
    else if (aleatoire == 8)
    {
        retour == (h);
        return h;
    }
    else if (aleatoire == 9)
    {
        retour == (i);
        return i;
    }
    else if (aleatoire == 10)
    {
        retour == (j);
        return j;
    }
    else if (aleatoire == 11)
    {
        retour == (k);
        return k;
    }
    else if (aleatoire == 12)
    {
        retour == (l);
        return l;
    }
    else if (aleatoire == 13)
    {
        retour == (m);
        return m;
    }
    else if (aleatoire == 14)
    {
        retour == (n);
        return n;
    }
    else if (aleatoire == 15)
    {
        retour == (o);
        return o;
    }
    else if (aleatoire == 16)
    {
        retour == (p);
        return p;
    }
    else if (aleatoire == 17)
    {
        retour == (q);
        return q;
    }
    else if (aleatoire == 18)
    {
        retour == (r);
        return r;
    }
    else if (aleatoire == 19)
    {
        retour == (s);
        return s;
    }
    else if (aleatoire == 20)
    {
        retour == (t);
        return t;
    }
    else if (aleatoire == 21)
    {
        retour == (u);
        return u;
    }
    else if (aleatoire == 22)
    {
        retour == (v);
        return v;
    }
    else if (aleatoire == 23)
    {
        retour == (w);
        return w;
    }
    else if (aleatoire == 24)
    {
        retour == (x);
        return x;
    }
    else if (aleatoire == 25)
    {
        retour == (y);
        return y;
    }
    else if (aleatoire == 26)
    {
        retour == (z);
        return z;
    }

}


Mon .h
#ifndef MINUSCULE_H_INCLUDED
#define MINUSCULE_H_INCLUDED
#include <string>
std::string minuscule();

#endif // MINUSCULE_H_INCLUDED






1 réponse

KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
Modifié par KX le 20/11/2011 à 04:29
C'est exprès que tu as fait la méthode compliqué qui ne sert à rien ?

Voici comment faire en une ligne ta fonction minuscule :

char minuscule() { return 'a' + rand()%26; }

Pour ce qui est des erreurs dans le main, je te laisse directement regarder mon code, c'est pas tout à fait comme toi, mais ça fait la même chose :

#include <iostream>   

using namespace std;   

inline char aleaSet(const char start,const char end)   
{   
    return start + rand()%(end-start+1);   
}   

int main()   
{   
    cout << "Ceci est un generateur de mot de passe !" << endl << endl;   
    cout << "Comment voulez-vous votre mot de passe" << endl;   
       
    int type;   
    do   
    {   
        cout<< "1: minuscule" << endl   
            << "2: MAJUSCULE" << endl   
            << "3: Les Deux" << endl;   
        cin >> type;   
    }   
    while (type<1 && type>3);   
       
    int nbDeChar;   
    do   
    {   
        cout << "Combien de caracteres votre mot de passe doit-il contenir ?" << endl;   
        cin >> nbDeChar;   
    }   
    while (nbDeChar<1);   
       
    for (int i=0; i<nbDeChar; i++)   
    {   
        if (type==1 || (type==3 && (rand()%2)))   
            cout << aleaSet('a','z');   
        else   
            cout << aleaSet('A','Z');   
    }   
       
    cout << endl;   
       
    return 0;   
}
La confiance n'exclut pas le contrôle
0
C'est quoi inline
Dsl. Je commence!
0
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
20 nov. 2011 à 12:15
À la limite inline on s'en moque, c'est juste un peu d'optimisation.
Ça veut dire que lors de la compilation les appels aux fonctions inline seront remplacées directement par le contenu de la fonction (comme une macro en C).

Exemple : avec mon inline sur aleaSet le code qui sera véritablement compilé sera donc :

if (type==1 || (type==3 && (rand()%2)))   
    cout << ('a' + rand()%('z'-'a'+1));   
else   
    cout << ('A' + rand()%('Z'-'A'+1));
0