C++ Schleife, bis ein bestimmtes Zeichen eingegeben wird
Einer Praxis-übung aus dem Buch, die ich benutze (recapping das Kapitel über die verschiedenen Arten von Schleifen) hat mich angewiesen, erstellen Sie ein Programm, das ständig fordert den Benutzer zur Eingabe einzelner Zeichen. Es gibt zwei Spezifikationen:
- Das Programm sollte beendet werden, wenn die " $ " - Zeichen eingegeben werden.
- Das Programm zu halten, sollten eine strichliste über die Anzahl der Zeiträume eingegeben, und die Ausgabe der Summe als das Programm beendet. Grundsätzlich ist die ganze Idee ist Schleife die input-Eingabeaufforderung -> Graf-Perioden -> Anzeige-diese zählen und dann beenden Sie das Programm, wenn "$" eingegeben werden.
Hier der code, den ich habe:
//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;
}
Das Programm funktioniert einwandfrei und der code sieht effiziente mir, bitte korrigiert mich wenn ich falsch bin. Was seltsam scheint mir, ist der Gebrauch des unendlichen für{} Schleife um den Großteil des Codes. Die Kapitel verwendet, diese einmal oder zweimal, so ist es die einzige Möglichkeit, die ich derzeit kenne, um eine loop-Funktion in dieser Art und Weise.
Vielleicht ist es einfach meine Unerfahrenheit mit der Sprache, aber ist die Verwendung einer Schleife mit (;;)
hier einen typischen Vorfall in C++? Die syntax der mit einer Schleife mit keine Parameter definiert, scheint Sinn zu machen für das, was ich benötigt zu tun, aber das ganze for (;;) {} - block sieht immer noch seltsam für mich.
- Die
for(;;)
Schleife ist irrelevant in dieser situation,wird die Schleife mit mindestens einem Zustand, den ich.efor(;some condition;)
noch Sinn machen, aber nicht hier. - Danke, ich fand, dass die Schleife aus und alles funktioniert weiterhin einwandfrei. Das Buch hatte verwendet eine for(;;) Schleife zu zeigen, die gleiche Funktion (looping, bis bestimmte Eingabe) weiter oben in dem Kapitel so, da bin ich auf die Idee gekommen ist. Ich bin nicht auf dem computer mit, dass der code im moment ist, so werde ich, einen anderen Blick morgen. Ist for (;;) - Schleife, wie ich es hatte, ohne Bedingungen, nützlich in irgendeiner Weise, oder ist es Fremd, wie es hier war?
- In diesem besonderen Fall die for-Schleife ist nichts zu tun, da der break springt aus der es, bevor es jemals Schleifen. Aber im Allgemeinen gibt es sicherlich auch mal, wenn so eine "forever" - Schleife ist notwendig, entweder eine Pause oder eine Rückkehr in Ihr. Vermutlich ist es eher üblich, dies mit einer while(true) {...} - Schleife.
- ja absolut richtig, das hätte eine Antwort mit einigen details. das ist, warum ich sagte, irrelevant in dieser situation gibt es einige situation, wo diese Schleife ist notwendig.
- Danke, es schien wie eine seltsame Verwendung der für{} Schleife zu mir.
- Es gibt ein paar Möglichkeiten, um eine unendliche Schleife zu bevorzugen einige Leute
while (1)
oderwhile (true)
. Ich persönlich bevorzugefor (;;)
. Und Nein, es ist nicht ungewöhnlich. - Was machte Sie denken, Sie brauchte die for-Schleife? Lesen Sie Ihren code erneut, dass Sie eine "while (!Zustand)" sofort gefolgt von einem "wenn (Bedingung)". Fragen Sie sich selbst: Wie würden Sie erreichen das "wenn", ohne die Bedingung wahr? Wenn das der Fall ist, die Molke braucht man das "for()"? C-Programmierer verwenden
for(;;) { if (...) break; work; if (...) break; more work; break; }
als ein flow-control-Paradigma, das nicht beabsichtigt Schleife. Es ist in der Tat ein "goto", und wahrscheinlich sollte nicht verwendet werden in "C++". Verwenden Sie nur "for (;;)", wenn Sie beabsichtigen, eine Schleife. - Das ist wahr, auf Wiederlesen kann ich es sehen, dass das "während" und "wenn" - Bedingungen decken alles von selbst. Der Grund, warum ich enthalten for(;;) ist, dass das Buch hatte es bei der Einführung das Konzept einer Schleife, der ausgeführt wird, bis zu einem bestimmten Benutzer-Eintrag, und daher dachte, es war die standard-Vorgehensweise. Ich habe nicht versucht, läuft das Programm ohne for(;;), aber ich werde dies im Hinterkopf behalten für die Zukunft.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Keine Notwendigkeit für entweder die äußere Schleife oder die
if
überprüfen, nachdem die innere Schleife.Ich würde auch prüfen, ob Fehler oder EOF beim Lesen, und so würde der code so etwas wie dieses:
for (periods = 0; std::cin >> ch && ch != '$'; )
ist einfach die Deklaration der Variablen, die Annahme der Eingabe (im Gegensatz zu meinem widmete eine ganze Zeile zucin
) und dann überprüfen, dass es nicht mit einem dollar-Zeichen, richtig? Es sieht aus, als ob es schrumpft mein code unten, um eine all-inclusive-block.(;;)
hier einen typischen Vorfall in C++?Den Einsatz von
for (;;)
oder andere wiewhile (1)
ich gesehen habe, fast ausschließlich in Büchern oder Beispiel code-snippets . Ich habe zwar noch nie gesehen, diese in vollwertige Programme, ist es wahrscheinlich nur ein bisschen weniger Häufig. In der Regel gibt es aber mindestens einen Ausdruck (manchmal auch mehr) innerhalb der Schleife. Obwohl es möglich ist, verwenden Siebreaks
nur, es nimmt Sie Weg von der Lesbarkeit. Betrachten Sie das folgende:Und
Welches ist besser lesbar? Ich bevorzuge letzteres, aber es ist immer noch nur eine Meinung. Es gibt auch viele andere Möglichkeiten zum schreiben einer Schleife (ie):
break
in der ursprünglichen Frage ist nicht gesteuert von einemif
.Ewig Schleifen ist häufiger auf die Elektronik. Manchmal main auch so Aussehen:
In diesem Fall wichtigsten Funktion wartet auf interrupts zu handhaben.
In der Regel nicht ewig Schleifen, aber es ist nicht eine schlechte Entscheidung, eben nicht standart Weg, um Probleme zu lösen.
Lässt sagen-code aussieht:
Können wir ändern in:
In Fällen, In denen wir brauchen, um ausführen-Schleife mindestens einmal wir können do-while-Schleife.