使用带有开关的if else

时间:2012-11-12 00:46:31

标签: c++

#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 个答案:

答案 0 :(得分: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语句的情况下,完成交换机没有为您做的任何事情。 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...

答案 1 :(得分:1)

这不是交换机的工作原理。由于您是根据范围做出决策,因此您只需要一个简单的if / else if / else链。有关如何使用开关的更多信息,请阅读this

答案 2 :(得分:0)

你可能想放     cout&lt;&lt; “你想继续吗?y / n”&lt;&gt; ANS;

while循环结束时。

此外,我还建议只是说出来

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

然而,最大的问题是,只有当n == 1时,switch语句才有效。摆脱整个switch语句,只需使用if s。

答案 3 :(得分: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++。这没有多大意义。