C++ en boucle jusqu'à ce qu'un caractère est entré
Un exercice pratique à partir du livre que je suis en utilisant (rechapage le chapitre sur les différents types de boucles) m'a demandé de créer un programme qui demande sans cesse à l'utilisateur de saisir des caractères individuels. Il y a deux caractéristiques:
- Le programme doit se terminer lorsque le caractère "$" est entré.
- Le programme devrait conserver un contrôle du nombre de périodes d'entrée et de sortie le total à mesure que le programme se termine. Fondamentalement, l'idée est de la boucle de l'invite d'entrée -> compter les périodes -> afficher ce nombre puis la fin du programme, lorsque "$" est entré.
Voici le code que j'ai:
//Takes character input, tallies periods, stops on dollar sign
#include <iostream>
using namespace std;
int main() {
char i; //input received
int j = 0; //counter for # of periods
cout << "This program will accept single-character entries and report the number of periods you've entered.\n";
for (;;) {
do {
cout << "Please enter a single character, using $ to stop: ";
cin >> i;
if(i == '.')
j++;
} while(i != '$');
if(i == '$')
cout << "Total number of periods entered is " << j << " .";
break;
}
return 0;
}
Le programme fonctionne très bien et le code est efficace pour moi, s'il vous plaît corrigez-moi si je me trompe. Ce qui semble étrange pour moi, c'est l'utilisation de l'infini pour{} la boucle autour de la majorité du code. Le chapitre utilisés une ou deux fois donc c'est la seule façon que je connaisse pour faire une boucle de fonctionner de cette manière.
Peut-être que c'est juste mon inexpérience avec la langue, mais est l'utilisation d'une boucle avec (;;)
ici typique d'un événement en C++? La syntaxe d'avoir une boucle sans paramètres définis semble faire sens de ce que je devais faire, mais l'ensemble de la for(;;){} bloc semble toujours étrange pour moi.
- Le
for(;;)
boucle n'est pas pertinent dans cette situation,la boucle avec au moins une condition j'.efor(;some condition;)
aura encore un sens, mais pas ici. - Merci, j'ai pris que la boucle et tout fonctionne toujours correctement. Le livre avait utilisé un for(;;) boucle de démontrer la même fonction (en boucle jusqu'à l'entrée spécifique) plus tôt dans le chapitre, donc c'est là que j'ai eu l'idée. Je ne suis pas sur l'ordinateur avec ce code en ce moment, donc je vais prendre un autre coup d'oeil demain. For(;;) en boucle comme je l'ai eu, sans conditions, utile en aucune façon, ou est-ce superflu que c'est ici?
- Dans ce cas, la boucle for est de ne rien faire, depuis la rupture des sauts hors de lui avant qu'il ne boucles. Mais en général, il y a certainement des moments où, tel un "pour toujours" de la boucle est nécessaire, avec une pause ou un retour en son sein. Il est probablement plus fréquent pour ce faire avec un while(true){...} la boucle.
- oui tout à fait raison, ça aurait pu être une réponse avec quelques détails. c'est pourquoi j'ai dit hors de propos dans cette situation, il y a certaines situations où cette boucle est nécessaire.
- Merci, il me semblait étrange, une utilisation de la{} boucle pour moi.
- Il ya quelques façons de faire une boucle infinie, certaines personnes préfèrent
while (1)
ouwhile (true)
. Personnellement, je préfèrefor (;;)
. Et non, il n'est pas rare. - Ce qui fait que vous pensez que vous avez besoin d'une boucle for? Lire votre code, vous disposez d'un "while (!condition)", immédiatement suivi par un "si (condition)". Demandez-vous: "Comment voulez-vous atteindre le "si", sans la condition d'être vrai? Si c'est le cas, whey avez-vous besoin de le "pour()"? Certains programmeurs C utilisation
for(;;) { if (...) break; work; if (...) break; more work; break; }
comme un contrôle de flux paradigme qui n'est pas destiné à boucle. Il est, en effet, un goto, et ne devrait probablement pas être utilisé en "C++". Utilisez uniquement "for(;;)" lorsque vous avez l'intention de boucle. - C'est vrai, sur le relisant, je vois que le "tout" et "si" les conditions de couvrir tout par eux-mêmes. La raison pour laquelle j'inclus for (;;), c'est que le livre avait utilisé lors de l'introduction de la notion de boucle qui s'exécute jusqu'à ce qu'un utilisateur d'entrée, et donc pensé que c'était de l'approche standard. Je n'ai pas cherché à l'exécution du programme sans le for(;;), mais je vais garder cela à l'esprit pour l'avenir.
Vous devez vous connecter pour publier un commentaire.
Pas nécessaire pour la boucle externe ou le
if
vérifier après la boucle interne.Je voudrais également vérifier pour les erreurs ou expressions du FOLKLORE lors de la lecture, et le code qu'il à quelque chose comme ceci:
for (periods = 0; std::cin >> ch && ch != '$'; )
est tout simplement déclarer la variable, d'accepter l'entrée (à l'opposé de ma consacrant toute une ligne decin
) et ensuite vérifier que ce n'est pas un signe de dollar, correct? Il semble que si elle est craintive mon code vers le bas pour un tout inclus bloc.(;;)
ici typique d'un événement en C++?L'utilisation de
for (;;)
ou d'autres commewhile (1)
j'ai vu presque exclusivement dans les livres ou exemple des extraits de code . Alors que je n'ai jamais vu cela à part entière des programmes, c'est probablement juste un peu moins commun. Généralement, cependant, il y a au moins une expression (parfois plus) à l'intérieur de la boucle. Bien qu'il est possible d'utiliserbreaks
seulement, il enlève de la lisibilité. Considérez les points suivants:Et
Qui est plus lisible? Je préfère le dernier, mais ça reste juste un avis. Il y a aussi beaucoup d'autres façons d'écrire une boucle (ie):
break
dans la question d'origine n'est pas contrôlée par unif
.Jamais boucles est plus fréquente sur l'électronique. Parfois principale même ressembler à ceci:
Dans ce cas, la fonction principale attend que les interruptions de la poignée.
Généralement nous n'utilisons jamais de boucles, mais ce n'est pas une mauvaise décision, tout simplement pas standart façon de résoudre le problème.
Permet de dire que le code qui a l'air:
Nous pouvons changer en:
Dans les cas où nous avons besoin pour exécuter la boucle au moins une fois, on peut utiliser-lors de la boucle.