2011-09-19 11 views
0
#include <iostream> 
using namespace std; 

int main() 
{ 
    int positiveInteger; 

    cout << "Please input an integer up to 100." << endl; 

    cin >> positiveInteger; 

    int result = 0; 
    for (int i = 0; i <= positiveInteger; i++) 
    { 
     if (positiveInteger >= 0) 
     { 
      result += i; 
     } 
     else 
     { 
      cout << "Please input a positive integer." << endl; 
     } 
    } 

    cout << result; 
    return 0; 
} 

上記の私はforループを持っています。中央にif else文があります。私は負の値ではない整数を入力すると、その結果をループするので、混乱しています。しかし、正の整数を入力してください。だから私はそれをif文で設定するのですが、上記の数値と= 0は結果を返しますが、負の数を入力すると、ただ0が得られます。「正の整数を入力してください。私は何が間違っているのか分かりません。 trueの場合はif文がifを引き出し、trueでない場合はelseを引き出しますか?または私は何かを逃していますか?else文が混乱している場合C++

+0

待ち、私はちょうどそれが入力整数が正のthatsしてくださいと言うなぜ文句を言わない、まだ結果が0を返す実現しますが? – mystycs

答えて

3

;:私はそれをこのようなものを構築したいです 2.1数値が正の場合は、ループします。 2.2負の値の場合は、エラーメッセージが表示されます。

問題はあなたのループであり、条件式は、i(ゼロ)が小数点以下であるかどうかを調べます。しかし、負の数を入力すると、私はpositiveIntegerより大きくなり、ifをループしません。あなたのコードを修正しました

using namespace std; 

int main() 
{ 
    int positiveInteger; 

    cout << "Please input an integer up to 100." << endl; 

    cin >> positiveInteger; 

    int result = 0; 
    if (positiveInteger >= 0){ 
     for (int i = 0; i <= positiveInteger; i++) 
     { 
      result += i; 
     } 
     cout << result; 
    } 
    else { 
     cout << "Please input a positive integer." << endl; 
    } 

    return 0; 

} 
+0

興味深いことに、私は内部にforloopを置くと思っていませんでした。 – mystycs

+1

また、if文の中に 'cout << result'を置くので、肯定を入力してください。 – mystycs

+0

うん、実際に私はそれを逃した。あなたは自分自身を言及した理由のためにそれを行う必要があります: – DallaRosa

4

負の数を入力すると、ループに入ることはありません。そのような場合に適したアプローチは次のとおりです。

do 
{ 
    input a number; 
    if(positive) 
     do something; 
} while(not positive); 
+0

これはdo whileループと見なされますか? – mystycs

+0

@mystcys、読むことができるので、それは.... –

+1

ああ、私はちょうどこれをまだ研究していません。 – mystycs

0

私の理解から、数値が負の場合、別の入力をしたいと考えています。しかし、cinステートメントはそれを行うループ制御の下にありません。それは数の性質に関係なくただ1回だけ実行します。

1

あなたのコードはいくつかの並べ替えの恩恵を受けると思います。私は右のそれを得た場合、あなたは 1の入力数にしたい

do { 
    cout << "please enter a number between 1 and 100"; 
    number = get_number(): 
} while (number < 1 || number > 100); 

cout << sum_series(1, number); 
+0

ああ、私はこれを学んだが、まだループしている。私の理解からより効率的になるのですが? – mystycs

+0

これは論理よりも効率が悪い:常に少なくとも1回は数値を読み取る必要がある。これはdo/whileループの目的である。 –

1

あなたのループは、負でない数字で失敗するためです。あなたは次のことを試してみてください:

int main() 
{ 

int positiveInteger; 

cout << "Please input an integer upto 100." << endl; 

cin >> positiveInteger; 

int result = 0; 
if (positiveInteger < 0) 
{ 

    cout << "Please input a positive integer." << endl; 

} 
else{ 


    for (int i = 0; i <= positiveInteger; i++) 
    { 

    result += i; 

    } 

cout << result; 

} 
return 0; 

}