Bonjour,
je suis un débutant en C++. J'apprend le c++ par moi-même à l'aide des tutoriel. Je suis en train de faire mon tout premier chat. Mais, j'ai un problème qui m'est survenu. C'est que dans ma condition :
QMessageBox::information(this,"test","destinateur = "+nomDestinateur); // Verifier nom destinateur
QMessageBox::information(this,"test","destinataire = "+nomDestinataire); // verifier nom destinataire
if(nomDestinataire!=pseudo->text()&&nomDestinateur!=pseudo->text())
{
QMessageBox::information(this,"test","erreur incomprehensible"); // Il me sert à détecter l'erreur
return;
}
Si le nom du du destinataire n'est pas celui du compte ET que le nom du destinateur n'est pas celui du compte, j'arrête la fonction. Le problème c'est que si une des 2 conditions est vrai, la fonction s'arrête. Pourtant, je veux que c'est si ces 2 conditions sont vrai pour que la fonction puisse s'arrêter. Merci.
On dit expéditeur, pas déstinateur.
if(!nomDestinataire.equals(pseudo->text())
&& !nomDestinateur.equals.(pseudo->text()))
C'est soit equals, soit equalsTo je sais plus.
Déjà mets des espaces et des parenthèses autour des conditions, ce sera plus clair et plus propre. Ex :
if((variable1 != etat1) && (variable2 != etat2))
Ensuite je comprends rien à ton code, mais peu importe. C'est des String que tu testes ? De std::String ? Si oui, tu peux utiliser la fonction strcmp qui compare des chaînes de caractère : http://www.cplusplus.com/reference/cstring/strcmp/
Note que je dis probablement des bêtises pour strcmp, c'est du C pas du C++ je crois. Tu dois pouvoir utiliser le '==' ou la fonction compare() de la classe String...
Le 16 décembre 2014 à 20:22:56 GouKi91 a écrit :
On dit expéditeur, pas déstinateur.if(!nomDestinataire.equals(pseudo->text()) && !nomDestinateur.equals.(pseudo->text()))
C'est soit equals, soit equalsTo je sais plus.
les méthodes equals ou equalsTo n'existent pas. Je pense que vous faites du C.
Le 16 décembre 2014 à 20:34:16 Tikim a écrit :
Note que je dis probablement des bêtises pour strcmp, c'est du C pas du C++ je crois. Tu dois pouvoir utiliser le '==' ou la fonction compare() de la classe String...
La fonction compare() n'est pas approprié parce qu'il fais juste comparer la longueur & les majuscules.
La surchage d'opérateur "==" et l'opérateur != existe pour la class string de la lib standard, son erreur est plus une erreur de logique qu'une erreur de C++.
Sinon, il suffit de faire un truc du genre.
if(nomDestinataire == pseudo->text() && nomDestinateur == pseudo->text())
{
// do your work
}
else
{
// error
}
Je ne comprend pas parce que parfois ma condition marche & parfois non.
if( (nomDestinataire == pseudo->text()) || (nomDestinateur == pseudo->text()) )
{
bool chercherOnglet(false);
int ongletTrouve(0);
while(!chercherOnglet&&ongletTrouve<listeChat->count())
{
if(listeChat->tabText(ongletTrouve)==nomDestinateur)
{
chercherOnglet = true;
}
ongletTrouve++;
}
if(!chercherOnglet)
{
msgbox.push_back(new QTextEdit);
msgbox[msgbox.size()-1]->setReadOnly(true);
listeChat->addTab(msgbox[msgbox.size()-1],nomDestinateur);
if(listeChat->tabText(ongletTrouve)==pseudo->text())
{
listeChat->removeTab(ongletTrouve);
}
ongletTrouve = msgbox.size();
}
else
{
ongletTrouve--;
}
msgbox[ongletTrouve-1]->append(messageRecu);
}
else
{
QMessageBox::information(this,"test","erreur incomprehensible");
return;
}
Je suis en train de faire un chat. Pour être plus précis, si "A" envoit un message à "B". Le destinateur devient "A" & le destinataire devient "B". Pour le pseudo, puisque je suis en train d'envoyer le message à partir de "A", alors "A" devient mon pseudo. Ça veut dire que b=a || a=a, ce qui rend ma condition vrai. Mais, il envoit l'alerte "Erreur incompréhensible" que j'ai créée pour détecter si la condition est fausse. Pourtant pour "B", ça fait b=b || a=b & la condition marche. Au tout début j'ai cru mon programme ne connaissait pas le destinateur. Mais quand j'ai essayé d'envoyer un message avec "B", ça fait a=b || a=a et ma condition retourne faux pourtant a=a. Ce qui envoit à "A", a=a b=a et ma condition retour faux pourtant a=a. En résumé, ma condition marche seulement à certaine occasion.
Ps : J'ai essayé de le dire le simple possible.
Tu veux pas mettre des espaces dans tes conditions entre les symboles de comparaison, le double &, et tes variables ? Je sais pas comment tu fais mais je saigne des yeux quand je vois ça
Le 18 décembre 2014 à 06:43:54 Tikim a écrit :
Tu veux pas mettre des espaces dans tes conditions entre les symboles de comparaison, le double &, et tes variables ? Je sais pas comment tu fais mais je saigne des yeux quand je vois ça
Désolé , je prends note pour mon prochain projet.
Merci, ça marche.