in meinem Programm. Meine Do-While-Schleife funktioniert nicht und ich habe keine Ahnung warum. Alles, was ich wollte, ist, dass die Do-While-Schleife die Notwendigkeit für den Benutzer verringert, das Programm erneut auszuführen, wenn er eine andere Nummer eingeben möchte.Funktioniert die While-Schleife nicht?
Antwort
Versuchen Sie folgendes:
#include<iostream>
#include<string>
double tester;
using namespace std;
void stoupper (std::string& s)
{
std::string::iterator i = s.begin();
std::string::iterator end = s.end();
while (i != end) {
*i = std::toupper((unsigned char)*i);
++i;
}
}
double squarerootfinder (double number, double divisor){
tester = (number/(divisor * divisor));
if (divisor == 1) {
return 1;
}
else {
if (tester != (int)tester) divisor = squarerootfinder(number, divisor - 1);
}
return divisor;
}
int main() {
string runagain;
double number, divisor, squareroot, insidepart;
do {
cout << "Enter a whole number to find the square root of it \n";
cin >> number;
divisor = number;
squareroot = squarerootfinder(number, divisor);
insidepart = number/(squareroot * squareroot);
if (insidepart != 1) {
cout << squareroot << (char)251 << insidepart;
cout << endl;
}
else {
cout << squareroot << endl;
}
cout << "written by Arpan Gupta! \n";
cout << "Enter run again to run the program again. \n";
cin >> runagain;
stoupper(runagain);
} while (runagain == "RUN AGAIN");
return 0;
}
Die Idee, zu versuchen, und zu überprüfen jede Variation von „erneut ausführen, um“ der Benutzer kann (unabhängig davon, ob es alle Groß-/Kleinschreibung ist oder was auch immer ... wahrscheinlich ist das, wo dein Problem liegt ...)
OK, und ich habe Ihren Code ein bisschen aufgeräumt ... :-)
EDIT: Und, yep: absolut kein Grund, runagain
innerhalb Ihrer do { } while()
Schleife wieder zu deklarieren.
Sie deklarieren die zweimal in Ihrer Hauptschleife, die nicht notwendig ist. Auch double tester
sollte in squarerootfinder
Funktion deklariert werden, da Sie es nirgendwo sonst im Programm verwenden.
cin
ignoriert whitespace Sie sollten stattdessen in die getline-Funktion schauen. Diese link bietet ein Beispiel für die Verwendung. Verwenden Sie cin
Hier ist die Ursache des Problems. Sie können dies testen, indem einfach die Zeile:
cout<<runagain;
Direkt nach cin>>runagain;
.
In diesem Code:
cout << "Enter a whole number to find the square root of it \n";
cin >> number;
divisor = number;
squareroot = squarerootfinder(number, divisor);
Sie setzen divisor=number;
dann squarerootfinder
nennen, sondern Teiler verwenden, warum nicht einfach tun, wie folgt:
cout << "Enter a whole number to find the square root of it \n";
cin >> number;
squareroot = squarerootfinder(number, number);
Da divisor
und number
sind doch gleich.
- 1. die Übermittlungsschaltfläche funktioniert nicht
- 2. Die Pin funktioniert nicht
- 3. Die session funktioniert nicht
- 4. Die URL funktioniert nicht
- 5. Warum funktioniert die Validierung nicht?
- 6. Warum funktioniert die Suche nicht?
- 7. Die Update-Anweisung funktioniert nicht
- 8. die Onmouseover Funktion funktioniert nicht
- 9. Eine SQL-Abfrage, die früher funktioniert, funktioniert nicht mehr
- 10. cURL funktioniert nicht, aber die gleiche Seite funktioniert mit Browser
- 11. Radio-Button und wenn die Funktion funktioniert nicht funktioniert
- 12. For-Schleife funktioniert nicht, aber die While-Schleife funktioniert, warum?
- 13. cURL funktioniert, aber der Browser funktioniert nicht für die Knotenanwendung
- 14. Warum funktioniert die leere Basisklassenoptimierung nicht?
- 15. display: none funktioniert nicht für die Option
- 16. rails has_many: durch die Assoziation funktioniert nicht
- 17. Position behoben, die nicht für Kopfzeile funktioniert
- 18. Warum funktioniert die Überlastfunktion von [] hier nicht?
- 19. Warum funktioniert die Spülung nicht auf System.err?
- 20. C Präprozessor: die Texterkennung funktioniert nicht
- 21. Die Fortschritts-Zirkularanweisung des Winkelmaterials funktioniert nicht
- 22. renderEvent, die nicht im Vollkalender funktioniert
- 23. Kopieren in die Zwischenablage funktioniert nicht
- 24. SQL die Datumsfunktion nicht funktioniert als
- 25. wenn die Bedingung nicht wie gewünscht funktioniert
- 26. Die Contao 4.1.2 Installation funktioniert einfach nicht
- 27. Wie funktioniert die Schriftgröße hier nicht?
- 28. Die Datei colors.xml funktioniert nicht in Eclipse
- 29. die seekTo() Funktion funktioniert nicht in Videoview
- 30. UITableViewRowAnimationBottom funktioniert nicht für die letzte Zeile
Was läuft falsch? Kompiliert es nicht? Tut es nicht, was Sie erwarten? –
Da es sich um Hausaufgaben handelt, gebe ich dir ein paar Hinweise. Deklarieren Sie keine zweite runagain-Zeichenfolge innerhalb der Schleife. Die oben angegebene Erklärung ist in Ordnung. Versuchen Sie auszudrucken, was die Zeichenfolge enthält, nachdem Sie "erneut ausführen" eingegeben haben. Sie werden feststellen, dass cin bei Leerzeichen stoppt. Schauen Sie sich stattdessen getline an. –
Was passiert, wenn ein Benutzer 'RUN 'erneut eingibt ??? –