C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

trop simple mais ca ne marche pas

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
pascal baufre
Guest





PostPosted: Mon Apr 26, 2004 10:26 pm    Post subject: trop simple mais ca ne marche pas Reply with quote



Bonjours tous


Le programme suivant est simple mais il ne marche pas sur DEV C++, serez
vous me dire pourquoi, c'est au niveau du switche, je ne comprend pas ce qui
empeche les instructions du switch qui ne s'écécute pas merci .

Pascal Baufre



#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>

int main()
{

char touche;

printf(" Entrez les donnees nn" );
printf("t1-Articlet3-Verben" );
printf("t2-Nomtt4-Quitteznn");
printf("");


scanf("%s",&touche);

switch (touche)
{
case 1: printf("111");
break;

case 2: printf("222 ");
break;

case 3: printf("3333");
break;

case 4: printf("444");
break;

default : printf("nmauvaise touche n");
}
getch();
system("PAUSE");
return 0;
}


Back to top
Matthieu Moy
Guest





PostPosted: Mon Apr 26, 2004 10:30 pm    Post subject: Re: trop simple mais ca ne marche pas Reply with quote



"pascal baufre" <pascal.baufre (AT) free (DOT) fr> writes:

Quote:
Le programme suivant est simple mais il ne marche pas sur DEV C++, serez
vous me dire pourquoi, c'est au niveau du switche, je ne comprend pas ce qui
empeche les instructions du switch qui ne s'écécute pas merci .

Tu récupères un "char *", et tu fais le test en comparant avec des
entiers ...

--
Matthieu

Back to top
Pierre Maurette
Guest





PostPosted: Tue Apr 27, 2004 12:35 am    Post subject: Re: trop simple mais ca ne marche pas Reply with quote



"pascal baufre" <pascal.baufre (AT) free (DOT) fr> typa:

Quote:
Bonjours tous


Le programme suivant est simple mais il ne marche pas sur DEV C++, serez
vous me dire pourquoi, c'est au niveau du switche, je ne comprend pas ce qui
empeche les instructions du switch qui ne s'écécute pas merci .

Pascal Baufre



#include <iostream.h
#include #include #include #include
int main()
{

char touche;

printf(" Entrez les donnees nn" );
printf("t1-Articlet3-Verben" );
printf("t2-Nomtt4-Quitteznn");
printf("");


scanf("%s",&touche);

switch (touche)
{
case 1: printf("111");
break;

case 2: printf("222 ");
break;

case 3: printf("3333");
break;

case 4: printf("444");
break;

default : printf("nmauvaise touche n");
}
getch();
system("PAUSE");
return 0;
}

Bonjour,
Votre erreur provient du fait que les valeurs renvoyées par les
touches 1, 2, 3 et 4 ne sont pas 1, 2, 3 et 4, mais '1', '2', '3' et
'4'.
Ceci dit, si vous en postez d'autre, enlevez le #include et postez sur fr.comp.lang.c. Vous compilez du code C en C++, vous
risquez la remarque.
Une proposition :
<code>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

int main()
{

char touche;
int fini;

printf(" Entrez les donnees nn");
printf("t1-Articlet3-Verben");
printf("t2-Nomtt4-Quitteznn");
printf("");

do
{
//scanf("%s", & touche);
touche = getch();
fini = 1;
switch(touche)
{
case '1':
printf("111n");
break;

case '2':
printf("222n");
break;

case '3':
printf("333n");
break;

case '4':
printf("444n");
break;

default:
printf("mauvaise touchen");
fini = 0;
}
}
while(fini == 0);

//getch();
system("PAUSE");
return 0;
}
</code>
--
Pierre

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Tue Apr 27, 2004 8:48 am    Post subject: Re: trop simple mais ca ne marche pas Reply with quote

"pascal baufre" <pascal.baufre (AT) free (DOT) fr> wrote


Quote:
Le programme suivant est simple mais il ne marche pas sur DEV C++,
serez vous me dire pourquoi, c'est au niveau du switche, je ne
comprend pas ce qui empeche les instructions du switch qui ne
s'écécute pas merci .

#include <iostream.h
#include #include #include #include
int main()
{

char touche;

printf(" Entrez les donnees nn" );
printf("t1-Articlet3-Verben" );
printf("t2-Nomtt4-Quitteznn");
printf("");

scanf("%s",&touche);

Attention. Ici, tu lis une chaîne de caractères, non un seul caractère.
Si l'utilisateur entre un '1', tu vas écrire le ´1' dans touche, et un
'' quelque part ailleurs (en ce qui suit immédiatement touche dans la
mémoire. Et si par malheur, ton utilisateur entre "aaaaaaaaaaaaaaaaaa",
tu vas écrire tous ces caractères, à partir de l'adresse touche. Ce qui
risque de poser pas mal de problèmes.

En général, c'est extrement difficule à utiliser scanf, et le "%s" est
particulièrement dangéreux, et ne peut pas servir dans un programme
correct sans spécification de la longueur. Pour ce que tu veux faire,
une solution bien supérieur serait :

char touche ;
std::cin >> touche ;
if ( ! std::cin ) {
// Erreur, l'utilisateur n'a rien entrer.
} else {
switch ( touche ) {
// ...


Quote:
switch (touche)
{
case 1: printf("111");

Enfin, on entre les caractères, pas des chiffres. Tu as deux choix :

int touche ;
std::cin >> touche ;
if ( ! std::cin ) {
// Erreur...
} else {
switch ( touche ) {
case 1 :
// ...

}
}

ou :

char touche ;
std::cin >> touche ;
if ( ! std::cin ) {
// Erreur...
} else {
switch ( touche ) {
case ´1' :
// ...
}
}

Dans les deux cas, tu dois faire un

std::cin.ignore( INT_MAX, 'n' ) ;

pour bouffer la reste de la ligne.

Quote:
break;

case 2: printf("222 ");
break;

case 3: printf("3333");
break;

case 4: printf("444");
break;

default : printf("nmauvaise touche n");
}
getch();

Il n'y a pas de fonction getch() en C++. C'est une extension, propre à
MS-DOS, et supportée sous Windows pour des raisons de compatibilité avec
l'ancien. En plus, il ne collabore pas particulièrement avec stdin ni
avec cin -- il vaut mieux éviter de l'utiliser si tu n'est pas sous
MS-DOS ou si tu te sers ou de cin ou de stdin.

En l'occurance, je crois qu'un simple :

std::cin.ignore( INT_MAX, 'n' ) ;

(en plus de celui qui a servi à bouffer la reste de la ligne ci-dessus)
ferait l'affaire. (Pas besoin du "PAUSE" ci-dessous non plus.)

Quote:
system("PAUSE");
return 0;
}

--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.