2012-04-15 16 views
-3

私のdo-whileループは動作していませんし、なぜ私は考えていません。私がしたいdo-whileループは、別の番号を入力したいときにユーザーがプログラムを再実行する必要性を軽減することだけでした。Do Whileループが機能していませんか?私のプログラムで

+4

どうしたのですか?それはコンパイルされていませんか?あなたが期待していることをしていないのですか? –

+1

それは宿題なので、私はあなたにいくつかのヒントを与えます。ループ内に2番目のrunagain文字列を宣言しないでください。上記で宣言したものは問題ありません。 「もう一度実行」を入力した後に、文字列に含まれるものを印刷してみてください。 cinは空白で止まることに気付くでしょう。代わりにgetlineを見てください。 –

+1

ユーザが 'RUN again'を入力するとどうなりますか? –

答えて

-1

これを試してみてください:

#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; 
} 

アイデアは、それがすべて大文字/小文字かであるかどうかを試してみて、関係なく、ユーザが入力(「再実行」のいずれかの変化をチェックすることですあなたの問題がどこにあるのでしょうか...)

OK、あなたのコードをちょっと整理しました。:-)


編集:そして、いいえ、あなたのdo { } while()ループ内にrunagainを再宣告する理由は絶対にありません。

1

メインループでstring runagain;を2回宣言する必要はありません。またdouble testerは、プログラム内の他の場所では使用しないので、squarerootfinderで宣言する必要があります。

cinは、空白を無視して、代わりにgetline関数を調べる必要があります。このlinkには、その使用方法の例が示されています。 cinを使用すると、問題の原因になります。これをテストするには、次の行を追加するだけです。

cout<<runagain; 

cin>>runagain;の直後です。このコードで

divisornumberは、すべての後に等しいので

cout << "Enter a whole number to find the square root of it \n"; 
cin >> number; 
squareroot = squarerootfinder(number, number); 

cout << "Enter a whole number to find the square root of it \n"; 
cin >> number; 
divisor = number; 
squareroot = squarerootfinder(number, divisor); 

あなたはsquarerootfinderを呼び出す代わりに、ちょうどこのようにそれをしない理由除数を使用しての、その後divisor=number;を設定します。

関連する問題