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:

  1. Das Programm sollte beendet werden, wenn die " $ " - Zeichen eingegeben werden.
  2. 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.e for(;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) oder while (true). Ich persönlich bevorzuge for (;;). 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.

Schreibe einen Kommentar