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程序不会通过开关,一个小时前它工作正常,我不知道发生了什么

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,它将执行第一种情况;什么时候n == 2做第二种情况;否则它将执行默认块。

遵循带有if语句的案例并没有完成 switch 尚未为您做的任何事情。1 有效,因为当n == 1条件n < 300自动为真时。但是所有其他情况都依赖于 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

你可能想把 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 回答
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 回答