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 .
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Matthieu Moy
"pascal baufre" writes:
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
"pascal baufre" <pascal.baufre@free.fr> writes:
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 ...
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
Pierre Maurette
"pascal baufre" typa:
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 .
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 <iostream.h> 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;
//getch(); system("PAUSE"); return 0; } </code> -- Pierre
"pascal baufre" <pascal.baufre@free.fr> typa:
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 .
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 <iostream.h>
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;
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 .
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 <iostream.h> 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;
//getch(); system("PAUSE"); return 0; } </code> -- Pierre
kanze
"pascal baufre" wrote in message news:<408d8ca0$0$509$...
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 .
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 :
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.)
system("PAUSE"); return 0; }
-- James Kanze GABI Software mailto: 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
"pascal baufre" <pascal.baufre@free.fr> wrote in message
news:<408d8ca0$0$509$636a15ce@news.free.fr>...
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 .
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 :
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.)
system("PAUSE");
return 0;
}
--
James Kanze GABI Software mailto:kanze@gabi-soft.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
"pascal baufre" wrote in message news:<408d8ca0$0$509$...
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 .
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 :
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.)
system("PAUSE"); return 0; }
-- James Kanze GABI Software mailto: 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