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 :

[C++] D�tection du type d'une variable (saisie d'une matrice)


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13
    Par d�faut [C++] D�tection du type d'une variable (saisie d'une matrice)
    Bonjour,

    Je r�alise actuellement un programme qui prend deux matrices et en renvoit le produit.
    Je souhaite am�liorer la robustesse et je cherche � d�tecter lorsque des caract�res sont rentr�s lors de la saisie de la matrice.
    J'ai pens� jusqu'� pr�sent � typeid mais rien ne se passe lorsque que je rentre un caract�re, une valeur al�atoire est prise et l'exception qui est sens� etre envoy�e n'est pas prise en compte.

    Les �l�ments de ma matrice sont stock�s dans un vecteur.

    Voila ce que j'ai essay� pour l'instant :
    c'est mon op�rateur qui me permet d'acc�der aux �lements de la matrice en terme de lignes et colonnes (les �l�ments sont ensuite assign�s au stream : is >> m(i,j) )

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    double& Matrix::operator()(int i, int j) const throw(char*)
    {
     
    	if (i<0 || j<0) throw "Failed to access matrix element";
     
    	if (typeid(v[j+i*nrows]).name() == "char*") throw "Invalid matrix element";
    	else return v[j+i*nrows];// return the value
     
    }

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Tu n'arriveras � rien ainsi. Ta matrice est un vecteur de doubles, elle contiendra forc�ment des doubles. L'erreur, elle aura lieu lors de la conversion (le >>).
    Tout ce que tu peux faire, c'est tester les bits d'�tat de is apr�s l'instruction is >> m(i, j).

    De plus, � ma connaissance, throw char*, c'est mal. Tu devrais plut�t lancer une classe d�riv�e de std::exception... (et n'utilise pas les sp�cifications d'exceptions: En C++, elles font plus de mal que de bien).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    R�dacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supa�ro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Ing Supa�ro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par d�faut
    On peut v�rifier si le caract�re rentr� correspond bien aux exigences avec istringstream et un peu de bidouille.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une tr�s bonne doc sur le C++ (en) Why linux is better (fr)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13
    Par d�faut
    Est ce que tu pourrais m'expliquer comment tu fais pour controler le type?

  5. #5
    R�dacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supa�ro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Ing Supa�ro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par d�faut
    Voici:
    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
    #include <iostream>
    #include <string>
    #include <sstream>
     
    using namespace std ;
     
    int main(void)
    {  int n;
    	bool erreur ;
       char c ;
       std::string s;
       do
         { cout << "donnez un entier et un caractere :\n" ;
           getline(cin,s);
           istringstream tampon (s) ;
           if (tampon >> n >> c) erreur = false ;
                            else erreur = true ;
         }
       while (erreur) ;
       cout << "merci pour " << n << " et " << c << "\n" ;
    }
    (il peut �tre adapt� � n'importe quel type)
    Demande si tu ne comprend pas.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une tr�s bonne doc sur le C++ (en) Why linux is better (fr)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13
    Par d�faut
    J'ai essay� de l'adapter � mon op�rateur >>

    Le probl�me est qu'il me renvoie directement le message d'exception alors que je n'ai pas saisi un seul �l�ment...
    Apparemment (str >> a) est pris �gale � 0000000 au d�part et mon op�rateur = n'est pas fait pour initialiser des bool�ens...

    Voici la partie consacr�e � la saisie de matrice (plus haut, il y a double a; std::string s

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    cout << "input the matrix elements\n";
    	  for (int i=0; i<Nrows; i++) { 
    		  for (int j=0 ; j<Ncols; j++) {
    			  getline(cin,s);
    			  istringstream str(s);
    			  if (str >> a) is >> temp(i,j);
    			  else throw MatrixException("Invalid matrix element");
    		  }
    	  }

    Merci d'avance pour ton aide.

  7. #7
    R�dacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supa�ro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Ing Supa�ro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par d�faut
    Que repr�sente is ?
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une tr�s bonne doc sur le C++ (en) Why linux is better (fr)

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13
    Par d�faut
    is est le flux que je renvoit par la suite avec return is;

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13
    Par d�faut
    c'est bon j'ai r�ussi. merci

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 8
    Dernier message: 01/03/2012, 14h45
  2. R�ponses: 9
    Dernier message: 23/06/2009, 10h54
  3. R�ponses: 4
    Dernier message: 21/05/2009, 01h59
  4. R�ponses: 1
    Dernier message: 20/04/2007, 09h12
  5. r�cup�rer une variable javascript dans une variable java
    Par tx dans le forum G�n�ral JavaScript
    R�ponses: 1
    Dernier message: 06/07/2006, 17h55

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