0
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    int n;
    char ans, cont;
    ans = 'y';

    while (true){
        if (ans == 'y' || ans == 'Y'){
            cout << "Enter a price:" << endl;
            cin >> n;
            n++;

            cout << "do you want to continue? y/n" <<endl;
            cin >> ans;

            switch (n) {
                //Vat Prices
                case 1:
                    if (n<300)
                        cout << "You have to pay" << endl << n *  1.1 << "  $" << endl <<endl;
                    break;

                case 2:
                    if (n==300)
                        cout << "You have to pay" << endl << (n * 1.05) * 1.1 << "  $" << endl <<endl;
                    break;

                case 3:
                    if (n>=301 && n <= 500)
                        cout << "You have to pay" << endl << (n * 1.1) * 1.1 << "  $" << endl <<endl;
                    break;

                case 4:
                    if (n>= 501 && n <= 1000)
                        cout << "You have to pay" << endl << (n * 1.2)*1.1 << "  $" << endl <<endl;

                case 5:
                    if (n>1000)
                        cout << "You have to pay" << endl << (n * 1.3)* 1.1 << "  $" << endl <<endl;
                    break;
            }
        }
    }
    return 0;
}

プログラムがnスイッチを通過しないようにすると、1 時間前には問題なく動作しました。何が起こったのかわかりません。

4

4 に答える 4

3

あなたのインデントもあなたを助けていません。その switch ステートメントは、あなたが思っているようなことをしていません。このようなことをすると:

switch (n) {
case 1:
   //do stuff
   break;
case 2:
   //do stuff
   break
default:
   //do stuff
}

上記の場合の 1 と 2 は、オンにする n の値ですn == 1。2番目のケースを実行するときn == 2; それ以外の場合は、デフォルト ブロックを実行します。

ステートメントを使用してケースをif追跡しても、スイッチがまだ行っていないことは何も達成されません。n == 1条件n < 300が自動的にtrueになるため、1が機能します。ただし、他のすべてのケースは、n が 1、2、3、4、または 5 であることに依存しているため、他のテストはどれもパスできません。

あなたが本当に欲しいのは:

if (n < 300) {
    // do stuff
} else if (n == 300) {
    // do stuff
} else if (n > 300) {
    // do stuff
} etc...
于 2012-11-12T00:54:15.967 に答える
1

これはスイッチの仕組みではありません。範囲に基づいて決定を下しているため、単純な if/else if/else チェーンが必要になります。スイッチの使用方法の詳細については、こちらをお読みください。

于 2012-11-12T00:50:23.850 に答える
0

switch入力された価格がである場合にのみ、ステートメントがケースにヒットします1, 2, 3, 4 or 5。スイッチは、使用しようとしている方法では機能しませんif-else。制御構造を使用することをお勧めします。

if(n<300)
  cout << "You have to pay" << endl << n *  1.1 << "  $" << endl <<endl;
else if(n==300)
  cout << "You have to pay" << endl << (n * 1.05) * 1.1 << "  $" << endl <<endl;
else if(n <= 500)
  cout << "You have to pay" << endl << (n * 1.1) * 1.1 << "  $" << endl <<endl;
else if (<= 1000)
  cout << "You have to pay" << endl << (n * 1.2)*1.1 << "  $" << endl <<endl;
else
  cout << "You have to pay" << endl << (n * 1.3)* 1.1 << "  $" << endl <<endl;

nさらに、ループするたびに変数を上書きしているだけです。次に、1ずつインクリメントしますn++。これはあまり意味がありません。

于 2012-11-12T00:54:55.223 に答える
0

おそらく cout << "do you want to continue? y/n" <> ans; を入れたいと思うでしょう。

whileあなたのループの終わりに。

さらに、私はそれを言わせることもお勧めします

while (ans == 'y' || ans == 'Y')

ただし、大きな問題は、switchステートメントが n==1 の場合にのみ機能することです。switchステートメント全体を削除して、 ifs のみを使用します。

于 2012-11-12T00:52:28.757 に答える