cout << "Saisissez les commandes sous la forme: référence quantité <<
endl;
cout << "Entrez 0 0 pour terminer." << endl << endl;
cout << "Produit (1-5) / Quantité: ";
cin >> reference >> quantity;
while (reference !=0 && quantity !=0)
{
switch (reference)
{
case 1: quantity1 += quantity;
break;
case 2: quantity1 += quantity;
break;
case 3: quantity1 += quantity;
break;
case 4: quantity1 += quantity;
break;
case 5: quantity1 += quantity;
break;
default:cout << "Erreur sur la saisie de la référence !" <<
endl << endl;
break;
}
cout << "Produit (1-5) / Quantité: ";
cin >> reference >> quantity;
cout << "Saisissez les commandes sous la forme: référence quantité <<
endl;
cout << "Entrez 0 0 pour terminer." << endl << endl;
cout << "Produit (1-5) / Quantité: ";
cin >> reference >> quantity;
while (reference !=0 && quantity !=0)
{
switch (reference)
{
case 1: quantity1 += quantity;
break;
case 2: quantity1 += quantity;
break;
case 3: quantity1 += quantity;
break;
case 4: quantity1 += quantity;
break;
case 5: quantity1 += quantity;
break;
default:cout << "Erreur sur la saisie de la référence !" <<
endl << endl;
break;
}
cout << "Produit (1-5) / Quantité: ";
cin >> reference >> quantity;
cout << "Saisissez les commandes sous la forme: référence quantité <<
endl;
cout << "Entrez 0 0 pour terminer." << endl << endl;
cout << "Produit (1-5) / Quantité: ";
cin >> reference >> quantity;
while (reference !=0 && quantity !=0)
{
switch (reference)
{
case 1: quantity1 += quantity;
break;
case 2: quantity1 += quantity;
break;
case 3: quantity1 += quantity;
break;
case 4: quantity1 += quantity;
break;
case 5: quantity1 += quantity;
break;
default:cout << "Erreur sur la saisie de la référence !" <<
endl << endl;
break;
}
cout << "Produit (1-5) / Quantité: ";
cin >> reference >> quantity;
bonjour,
<snip>cout << "Saisissez les commandes sous la forme: référence quantité <<
endl;
cout << "Entrez 0 0 pour terminer." << endl << endl;
cout << "Produit (1-5) / Quantité: ";
cin >> reference >> quantity;
while (reference !=0 && quantity !=0)
{
switch (reference)
{
case 1: quantity1 += quantity;
break;
case 2: quantity1 += quantity;
break;
case 3: quantity1 += quantity;
break;
case 4: quantity1 += quantity;
break;
case 5: quantity1 += quantity;
break;
default:cout << "Erreur sur la saisie de la référence !" <<
endl << endl;
break;
}
ton switch ne sert pas à grand chose, puisque les actions sont toutes
similaires...
bonjour,
<snip>
cout << "Saisissez les commandes sous la forme: référence quantité <<
endl;
cout << "Entrez 0 0 pour terminer." << endl << endl;
cout << "Produit (1-5) / Quantité: ";
cin >> reference >> quantity;
while (reference !=0 && quantity !=0)
{
switch (reference)
{
case 1: quantity1 += quantity;
break;
case 2: quantity1 += quantity;
break;
case 3: quantity1 += quantity;
break;
case 4: quantity1 += quantity;
break;
case 5: quantity1 += quantity;
break;
default:cout << "Erreur sur la saisie de la référence !" <<
endl << endl;
break;
}
ton switch ne sert pas à grand chose, puisque les actions sont toutes
similaires...
bonjour,
<snip>cout << "Saisissez les commandes sous la forme: référence quantité <<
endl;
cout << "Entrez 0 0 pour terminer." << endl << endl;
cout << "Produit (1-5) / Quantité: ";
cin >> reference >> quantity;
while (reference !=0 && quantity !=0)
{
switch (reference)
{
case 1: quantity1 += quantity;
break;
case 2: quantity1 += quantity;
break;
case 3: quantity1 += quantity;
break;
case 4: quantity1 += quantity;
break;
case 5: quantity1 += quantity;
break;
default:cout << "Erreur sur la saisie de la référence !" <<
endl << endl;
break;
}
ton switch ne sert pas à grand chose, puisque les actions sont toutes
similaires...
Hello,
Afin d'effectuer une minuscule routine de saisie de donnés sur le prompt
(je suis en phase d'apprentissage), j'utilise un while avec une condition
de garde. Je teste ensuite la validité des valeurs entrées avec un switch.
Dans le default, je mets un message d'erreur, et je relance la saisie des
données.
Le problème est que lorsque je suis tombé dans le cas du default, je ne peux
plus rentrer de données, et ça boucle à l'infini. Je suppose que c'est lié
au vidage du tampon. Je n'ai pas ce problème avec les autre cases,
Hello,
Afin d'effectuer une minuscule routine de saisie de donnés sur le prompt
(je suis en phase d'apprentissage), j'utilise un while avec une condition
de garde. Je teste ensuite la validité des valeurs entrées avec un switch.
Dans le default, je mets un message d'erreur, et je relance la saisie des
données.
Le problème est que lorsque je suis tombé dans le cas du default, je ne peux
plus rentrer de données, et ça boucle à l'infini. Je suppose que c'est lié
au vidage du tampon. Je n'ai pas ce problème avec les autre cases,
Hello,
Afin d'effectuer une minuscule routine de saisie de donnés sur le prompt
(je suis en phase d'apprentissage), j'utilise un while avec une condition
de garde. Je teste ensuite la validité des valeurs entrées avec un switch.
Dans le default, je mets un message d'erreur, et je relance la saisie des
données.
Le problème est que lorsque je suis tombé dans le cas du default, je ne peux
plus rentrer de données, et ça boucle à l'infini. Je suppose que c'est lié
au vidage du tampon. Je n'ai pas ce problème avec les autre cases,
Afin d'effectuer une minuscule routine de saisie de donnés
sur le prompt (je suis en phase d'apprentissage), j'utilise
un while avec une condition de garde. Je teste ensuite la
validité des valeurs entrées avec un switch. Dans le
default, je mets un message d'erreur, et je relance la
saisie des données.
Le problème est que lorsque je suis tombé dans le cas du
default, je ne peux plus rentrer de données, et ça boucle à
l'infini. Je suppose que c'est lié au vidage du tampon. Je
n'ai pas ce problème avec les autre cases,
Normalement, le problème n'est pas dans le fait d'être passé
dans le default. Qu'est-ce que vous tapez comme entrée quand
ça commence à tourner en boucle?
En particulier, si l'utilisateur de votre programme tape
n'importe quoi, comme "Allez les bleus", l'instruction "cin >>
reference >> quantity;" ne peut extraire ce qu'il lui faut et
cin entre dans un état d'échec. cin.fail() renvoye true et
toute tentative de lire avec cin échoue ensuite.
Vous pouvez recommencer à lire cin en écrivant:
if (cin.fail())
{
// échec
cin.clear();
cin.ignore(numeric_limits<int>::max(), 'n');
}
La ligne cin.clear() efface l'état d'échec et permet de relire
dans cin. La ligne cin.ignore(...) évacue tout ce qui se
trouvait sur la ligne défectueuse.
Afin d'effectuer une minuscule routine de saisie de donnés
sur le prompt (je suis en phase d'apprentissage), j'utilise
un while avec une condition de garde. Je teste ensuite la
validité des valeurs entrées avec un switch. Dans le
default, je mets un message d'erreur, et je relance la
saisie des données.
Le problème est que lorsque je suis tombé dans le cas du
default, je ne peux plus rentrer de données, et ça boucle à
l'infini. Je suppose que c'est lié au vidage du tampon. Je
n'ai pas ce problème avec les autre cases,
Normalement, le problème n'est pas dans le fait d'être passé
dans le default. Qu'est-ce que vous tapez comme entrée quand
ça commence à tourner en boucle?
En particulier, si l'utilisateur de votre programme tape
n'importe quoi, comme "Allez les bleus", l'instruction "cin >>
reference >> quantity;" ne peut extraire ce qu'il lui faut et
cin entre dans un état d'échec. cin.fail() renvoye true et
toute tentative de lire avec cin échoue ensuite.
Vous pouvez recommencer à lire cin en écrivant:
if (cin.fail())
{
// échec
cin.clear();
cin.ignore(numeric_limits<int>::max(), 'n');
}
La ligne cin.clear() efface l'état d'échec et permet de relire
dans cin. La ligne cin.ignore(...) évacue tout ce qui se
trouvait sur la ligne défectueuse.
Afin d'effectuer une minuscule routine de saisie de donnés
sur le prompt (je suis en phase d'apprentissage), j'utilise
un while avec une condition de garde. Je teste ensuite la
validité des valeurs entrées avec un switch. Dans le
default, je mets un message d'erreur, et je relance la
saisie des données.
Le problème est que lorsque je suis tombé dans le cas du
default, je ne peux plus rentrer de données, et ça boucle à
l'infini. Je suppose que c'est lié au vidage du tampon. Je
n'ai pas ce problème avec les autre cases,
Normalement, le problème n'est pas dans le fait d'être passé
dans le default. Qu'est-ce que vous tapez comme entrée quand
ça commence à tourner en boucle?
En particulier, si l'utilisateur de votre programme tape
n'importe quoi, comme "Allez les bleus", l'instruction "cin >>
reference >> quantity;" ne peut extraire ce qu'il lui faut et
cin entre dans un état d'échec. cin.fail() renvoye true et
toute tentative de lire avec cin échoue ensuite.
Vous pouvez recommencer à lire cin en écrivant:
if (cin.fail())
{
// échec
cin.clear();
cin.ignore(numeric_limits<int>::max(), 'n');
}
La ligne cin.clear() efface l'état d'échec et permet de relire
dans cin. La ligne cin.ignore(...) évacue tout ce qui se
trouvait sur la ligne défectueuse.
switch (reference)
{
case 1: quantity1 += quantity;
break;
case 2: quantity1 += quantity;
break;
case 3: quantity1 += quantity;
break;
case 4: quantity1 += quantity;
break;
case 5: quantity1 += quantity;
break;
default:cout << "Erreur sur la saisie de la référence !" <<
endl << endl;
break;
}
ton switch ne sert pas à grand chose, puisque les actions sont toutes
similaires...
switch (reference)
{
case 1: quantity1 += quantity;
break;
case 2: quantity1 += quantity;
break;
case 3: quantity1 += quantity;
break;
case 4: quantity1 += quantity;
break;
case 5: quantity1 += quantity;
break;
default:cout << "Erreur sur la saisie de la référence !" <<
endl << endl;
break;
}
ton switch ne sert pas à grand chose, puisque les actions sont toutes
similaires...
switch (reference)
{
case 1: quantity1 += quantity;
break;
case 2: quantity1 += quantity;
break;
case 3: quantity1 += quantity;
break;
case 4: quantity1 += quantity;
break;
case 5: quantity1 += quantity;
break;
default:cout << "Erreur sur la saisie de la référence !" <<
endl << endl;
break;
}
ton switch ne sert pas à grand chose, puisque les actions sont toutes
similaires...
Bonjour.
Normalement, le problème n'est pas dans le fait d'être passé dans le
default. Qu'est-ce que vous tapez comme entrée quand ça commence à
tourner en boucle?
En particulier, si l'utilisateur de votre programme tape n'importe quoi,
comme "Allez les bleus", l'instruction "cin >> reference >> quantity;"
ne peut extraire ce qu'il lui faut et cin entre dans un état d'échec.
cin.fail() renvoye true et toute tentative de lire avec cin échoue
ensuite.
Vous pouvez recommencer à lire cin en écrivant:
if (cin.fail())
{
// échec
cin.clear();
cin.ignore(numeric_limits<int>::max(), 'n');
}
La ligne cin.clear() efface l'état d'échec et permet de relire dans cin.
La ligne cin.ignore(...) évacue tout ce qui se trouvait sur la ligne
défectueuse.
Bonjour.
Normalement, le problème n'est pas dans le fait d'être passé dans le
default. Qu'est-ce que vous tapez comme entrée quand ça commence à
tourner en boucle?
En particulier, si l'utilisateur de votre programme tape n'importe quoi,
comme "Allez les bleus", l'instruction "cin >> reference >> quantity;"
ne peut extraire ce qu'il lui faut et cin entre dans un état d'échec.
cin.fail() renvoye true et toute tentative de lire avec cin échoue
ensuite.
Vous pouvez recommencer à lire cin en écrivant:
if (cin.fail())
{
// échec
cin.clear();
cin.ignore(numeric_limits<int>::max(), 'n');
}
La ligne cin.clear() efface l'état d'échec et permet de relire dans cin.
La ligne cin.ignore(...) évacue tout ce qui se trouvait sur la ligne
défectueuse.
Bonjour.
Normalement, le problème n'est pas dans le fait d'être passé dans le
default. Qu'est-ce que vous tapez comme entrée quand ça commence à
tourner en boucle?
En particulier, si l'utilisateur de votre programme tape n'importe quoi,
comme "Allez les bleus", l'instruction "cin >> reference >> quantity;"
ne peut extraire ce qu'il lui faut et cin entre dans un état d'échec.
cin.fail() renvoye true et toute tentative de lire avec cin échoue
ensuite.
Vous pouvez recommencer à lire cin en écrivant:
if (cin.fail())
{
// échec
cin.clear();
cin.ignore(numeric_limits<int>::max(), 'n');
}
La ligne cin.clear() efface l'état d'échec et permet de relire dans cin.
La ligne cin.ignore(...) évacue tout ce qui se trouvait sur la ligne
défectueuse.
Aussi, et plus important, il faut qu'il teste la réussite des
entrées avant le switch. Parce que s'il y a erreur, les valeurs
précédantes ne seront pas modifiées, et il ne veut pas faire un
switch sur elles.
Finalement, aussi, s'il n'entre qu'une valeur, son code va
attendre la deuxième. S'il veut réelement que les deux valeurs
soient sur une seule ligne, il vaut mieux lire la ligne au moyen
de getline, puis utiliser istringstream pour en extraire les
valeurs. Dans ce cas-ci, il pourrait aussi réfuser des
non-blancs à la fin de la ligne (plutôt que de les ignorer) ;
son expression de lecture deviendrait alors :
Aussi, et plus important, il faut qu'il teste la réussite des
entrées avant le switch. Parce que s'il y a erreur, les valeurs
précédantes ne seront pas modifiées, et il ne veut pas faire un
switch sur elles.
Finalement, aussi, s'il n'entre qu'une valeur, son code va
attendre la deuxième. S'il veut réelement que les deux valeurs
soient sur une seule ligne, il vaut mieux lire la ligne au moyen
de getline, puis utiliser istringstream pour en extraire les
valeurs. Dans ce cas-ci, il pourrait aussi réfuser des
non-blancs à la fin de la ligne (plutôt que de les ignorer) ;
son expression de lecture deviendrait alors :
Aussi, et plus important, il faut qu'il teste la réussite des
entrées avant le switch. Parce que s'il y a erreur, les valeurs
précédantes ne seront pas modifiées, et il ne veut pas faire un
switch sur elles.
Finalement, aussi, s'il n'entre qu'une valeur, son code va
attendre la deuxième. S'il veut réelement que les deux valeurs
soient sur une seule ligne, il vaut mieux lire la ligne au moyen
de getline, puis utiliser istringstream pour en extraire les
valeurs. Dans ce cas-ci, il pourrait aussi réfuser des
non-blancs à la fin de la ligne (plutôt que de les ignorer) ;
son expression de lecture deviendrait alors :
Tout d'abord, désolé de répondre si tardivement, mais j'étais parti en
vacances. :-)Vous pouvez recommencer à lire cin en écrivant:
if (cin.fail())
{
// échec
cin.clear();
cin.ignore(numeric_limits<int>::max(), 'n');
}
Si je rajoute le code ci-dessus, mais en omettant le cin.ignore, j'obtiens à
la compilation les messages d'erreur suivants:
ex05_14.cpp:50: error: stray '302' in program
ex05_14.cpp:50: error: stray '240' in program
...
Si je rajoute le cin.ignore, j'obtiens en outre:
ex05_14.cpp:53: error: `numeric_limits' undeclared (first use this function)
ex05_14.cpp:53: error: (Each undeclared identifier is reported only once for
each function it appears in.)
ex05_14.cpp:53: error: syntax error before `>' token
ex05_14.cpp:53: error: `::max' undeclared (first use here)
ex05_14.cpp:53: error: syntax error before `)' token
La ligne cin.clear() efface l'état d'échec et permet de relire dans cin.
La ligne cin.ignore(...) évacue tout ce qui se trouvait sur la ligne
défectueuse.
C'est curieux, j'aurais inversé l'ordre de ces deux instructions...
Merci tout de même pour votre aide.
Tout d'abord, désolé de répondre si tardivement, mais j'étais parti en
vacances. :-)
Vous pouvez recommencer à lire cin en écrivant:
if (cin.fail())
{
// échec
cin.clear();
cin.ignore(numeric_limits<int>::max(), 'n');
}
Si je rajoute le code ci-dessus, mais en omettant le cin.ignore, j'obtiens à
la compilation les messages d'erreur suivants:
ex05_14.cpp:50: error: stray '302' in program
ex05_14.cpp:50: error: stray '240' in program
...
Si je rajoute le cin.ignore, j'obtiens en outre:
ex05_14.cpp:53: error: `numeric_limits' undeclared (first use this function)
ex05_14.cpp:53: error: (Each undeclared identifier is reported only once for
each function it appears in.)
ex05_14.cpp:53: error: syntax error before `>' token
ex05_14.cpp:53: error: `::max' undeclared (first use here)
ex05_14.cpp:53: error: syntax error before `)' token
La ligne cin.clear() efface l'état d'échec et permet de relire dans cin.
La ligne cin.ignore(...) évacue tout ce qui se trouvait sur la ligne
défectueuse.
C'est curieux, j'aurais inversé l'ordre de ces deux instructions...
Merci tout de même pour votre aide.
Tout d'abord, désolé de répondre si tardivement, mais j'étais parti en
vacances. :-)Vous pouvez recommencer à lire cin en écrivant:
if (cin.fail())
{
// échec
cin.clear();
cin.ignore(numeric_limits<int>::max(), 'n');
}
Si je rajoute le code ci-dessus, mais en omettant le cin.ignore, j'obtiens à
la compilation les messages d'erreur suivants:
ex05_14.cpp:50: error: stray '302' in program
ex05_14.cpp:50: error: stray '240' in program
...
Si je rajoute le cin.ignore, j'obtiens en outre:
ex05_14.cpp:53: error: `numeric_limits' undeclared (first use this function)
ex05_14.cpp:53: error: (Each undeclared identifier is reported only once for
each function it appears in.)
ex05_14.cpp:53: error: syntax error before `>' token
ex05_14.cpp:53: error: `::max' undeclared (first use here)
ex05_14.cpp:53: error: syntax error before `)' token
La ligne cin.clear() efface l'état d'échec et permet de relire dans cin.
La ligne cin.ignore(...) évacue tout ce qui se trouvait sur la ligne
défectueuse.
C'est curieux, j'aurais inversé l'ordre de ces deux instructions...
Merci tout de même pour votre aide.
wrote:Aussi, et plus important, il faut qu'il teste la réussite
des entrées avant le switch. Parce que s'il y a erreur, les
valeurs précédantes ne seront pas modifiées, et il ne veut
pas faire un switch sur elles.
Ben je croyais que le cin.ignore servait justement à ignorer
les entrées précédentes (fausses) ?
kanze@gabi-soft.fr wrote:
Aussi, et plus important, il faut qu'il teste la réussite
des entrées avant le switch. Parce que s'il y a erreur, les
valeurs précédantes ne seront pas modifiées, et il ne veut
pas faire un switch sur elles.
Ben je croyais que le cin.ignore servait justement à ignorer
les entrées précédentes (fausses) ?
wrote:Aussi, et plus important, il faut qu'il teste la réussite
des entrées avant le switch. Parce que s'il y a erreur, les
valeurs précédantes ne seront pas modifiées, et il ne veut
pas faire un switch sur elles.
Ben je croyais que le cin.ignore servait justement à ignorer
les entrées précédentes (fausses) ?
ex05_14.cpp:50: error: stray '302' in program
ex05_14.cpp:50: error: stray '240' in program
...
Houla... apparemment des caractères bizarres sont venus quand vous avez
fait un copier-coller à partir de votre lecteur de news. Tapez le à la
main, plutôt.
Il faut inclure l'en-tête standard <limits> pour utiliser
std::numeric_limits.
ex05_14.cpp:50: error: stray '302' in program
ex05_14.cpp:50: error: stray '240' in program
...
Houla... apparemment des caractères bizarres sont venus quand vous avez
fait un copier-coller à partir de votre lecteur de news. Tapez le à la
main, plutôt.
Il faut inclure l'en-tête standard <limits> pour utiliser
std::numeric_limits.
ex05_14.cpp:50: error: stray '302' in program
ex05_14.cpp:50: error: stray '240' in program
...
Houla... apparemment des caractères bizarres sont venus quand vous avez
fait un copier-coller à partir de votre lecteur de news. Tapez le à la
main, plutôt.
Il faut inclure l'en-tête standard <limits> pour utiliser
std::numeric_limits.