2012-04-15 6 views
-3

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?

+4

Was läuft falsch? Kompiliert es nicht? Tut es nicht, was Sie erwarten? –

+1

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. –

+1

Was passiert, wenn ein Benutzer 'RUN 'erneut eingibt ??? –

Antwort

-1

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.

1

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.

Verwandte Themen