Demande d'aide pour mon (1er) programme c++

ArCTiK twister [HardCorp.] -  
 ArCTiKTwisTeR -
< 3 > - Demande d'aide pour mon prog C++
Ajouté par ArCTiKtwister [HardCorp.](29/08/2003 à 12:06 GMT+1)
Salut tout le monde voici mon premier prog en C++==


#include<iostream.h>

int main()
{

char var1[] = "arctik";
char var2[] = "twister";

cout<<"Tapez votre login:\n";
cin>>var1;
cout<<"Tapez votre pass:\n";
cin>>var2;

if ((var1=="arctik") && (var2=="twister"))
{
cout<<"Bienvenue\n";
}
else
{
cout<<"Au revoir\n";
}

char fin;
cin>>fin;
}

Voila c'est mon premier prog en c++ et si vous le tester, vous verrez qu'il ne fonctionne pas. Quelqu'un peut m'expliquer pourquoi pleaze.!!....
Merci d'avance tout le monde!!

9 réponses

teebo Messages postés 33491 Date d'inscription   Statut Modérateur Dernière intervention   1 793
 
Salut
Deja fait un void main et non un int, de plus "ne marche pas" est sans doute pas le message d'erreur que tu recuperes et pour finir ca ressemble nettement plus a du C qu'a du C++


.  .
\_/
        Sauvez Maily! Mangez Castor!
0
pouet
 
>Deja fait un void main et non un int,
surtout pas. void main() n est pas defini en C++
tu as
int main(void)
int main(int argc, char *argv[])
et c est tout.

--
pouet
0
ArCTiK twister [HardCorp.]
 
T'as raison, au fait ça ne m'affiche aucun messages d'erreurs!!
J'arrive même à lancer le programme après l'avoir compiler, mais il ne répond pas à mes attentes. Je rentre le login et le pass que j'ai définis et ça me répond "au revoir" au lieu de "Binvenue".
Alors j'ai inverser le "au revoir" et le "bienvenue "dans le code source, et là ça m'as afficher "bienvenue" après avoir entrer les données (aussi bien correctes que incorrectes)!!!
0
kemenaran
 
Je suis pas très doué, mais le problème vient sans doute de la comparaison des char dans le "if". d'ou le prog qui renvoie toujours une entrée pas conforme. essaie avec seulement le login, en supprimant le &&, marchera peut-etre.

Les srtings en cpp, c'est tellement gore...
0
pouet
 
bonsoir,

essaie d activer les avertissements de ton compilateur, ca t aidera.

#include<iostream.h>
// deprecie, c est
// #include <iostream>

int main()
// ok
{

char var1[] = "arctik";
// je prefere utiliser les std::string en C++
char var2[] = "twister";

cout<<"Tapez votre login:\n";
// c est std::cout
// ou alors mets using std; au dessus de main
// c est cependant deconseille pour les debutants
cin>>var1;
// c est std::cin
cout<<"Tapez votre pass:\n";
// c est std::cout
cin>>var2;
// c est std::cin
if ((var1=="arctik") && (var2=="twister"))
/* tu ne peux pas faire ca, tu compares un pointeur a une chaine de caracteres. je ne comprends pas que ca passe la compilation.
si tu choisis d utiliser les std::string, alors faire une comparaison d egalite est alors possible */
{
cout<<"Bienvenue\n";
// cest std::cout
// evite le \n, remplace par std::endl
// ex: std::cout << "bienvenue" << std::endl;
}
else
{
cout<<"Au revoir\n";
}

char fin;
// essaie de regrouper les declarations en debut de fonction
// ca ameliore la lisibilite
cin>>fin;
// et le return??
return 0;
}

enfin tes noms de variables sont mal choisis, var1, var2, ca rend le code incomprehensible.
bref, la meme chose en C++:

#include <iostream>
#include <string>

#define LOGIN "titi"
#define PASSWD "toto"
int main()
{


const std::string login = *new std::string(LOGIN);
const std::string passwd = *new std::string(PASSWD);
std::string input_login;
std::string input_passwd;

std::cout <<"Tapez votre login:"
<< login
<< std::endl;
std::cin >> input_login;
std::cout << "Tapez votre pass:"
<< passwd
<< std::endl;
std::cin >> input_passwd;

if ((input_passwd == passwd) && (login == login))
{
std::cout << "Bienvenue"
<< std::endl;
}
else
{
std::cout << "Au revoir"
<< std::endl;
}

char fin;
std::cin >> fin;
}

voili voilou,

--
pouet
0
ArCTiK[HardCorp.]
 
Je te remercie de ton aide.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bob
 
Où est la POO dans tout ça?
0
pouet
 
heu const std::string login = *new std::string(LOGIN); ?
disons que le code est tellement simple que ca se voit pas trop.
mais tu as deja un joli constructeur.

--
pouet
0
lanocm Messages postés 62 Date d'inscription   Statut Membre Dernière intervention   3
 
salut a toi.
moi c'est landry.je suis en train d'apprendre le C et le C++.vu que tu débutes aussi,je me suis dit que nous pourions collaborer. Tu en pense quoi?
merci
0
ArCTiKTwisTeR
 
salut Landry ben jveux bien collaborer avec toi, connaissons nous dejà un peu, mon msn :: arctiktwister@hotmail.com
a+
0
tomtom
 
les joies des pointeurs comme chaine de caractere ..... ;))
0
Pascal
 
On ne compare pas des chaines de caractere avec "==" !!!!!!!!

Il faut utiliser la fonction strcmp :

if (strcmp(var1,"artick")==0)

Si tu es curieux strcmp est definie ainsi :

int strcmp(const char *a, const char *b){
while(*a != '\0' || *b !='\0')
if(*(a++) != *(b++))
return 1;
return 0;
}
0
mirza
 
Bonjour,

je ne suis pas d'accord avec le définition donnée par stcmp

elle ne rend pas
0 si chaines égales
1 si chaînes différentes

mais elle rend
0 si chaines égales
un nombre positif (ou négatif): son signe indique laquelle des chaine est la plus grande. Sa valeur absolue indique la position ou elles différent

Cordialement,

Mirza
0
Pascal
 
Tu as raison Mirza,
Le retour de strcmp est plus complexe que 0 ou 1.
Mais c'etait pour simplifier par rapport à ca qui nous interesser (la comparaison).
0
mirza
 
Tu as aussi raison de faire simple Pascal pour expliquer à ceux qui démarrent

En fait le seul truc utile avec strcmp, stricmp et strncmp c'est de savoir si chaine1 <, = ou > à chaine 2
* = est utile pour les logins/passwords
* les < et > sont uiles pour les tris

bye,

mirza
0