2014-03-02 68 views
-2

我想知道如何把这个如果else语句的开关语句。这是一个C++程序来出把整数正确的顺序。我无法想出办法。请提前帮忙。如何打开的if else语句switch语句

int x, y, z; 
cout << "please enter three integers:"; 
cin >> x >> y >> z; 
if (x <= y && y <= z) 
    cout << x << " " << y << " " << z << endl; 
else if (x <= z && z <= y) 
    cout << x << " " << z << " " << y << endl; 
else if (y <= z && z <= x) 
    cout << y << " " << z << " " << x << endl; 
else if (y <= x && x <= z) 
    cout << y << " " << x << " " << z << endl; 
else if (z <= x && x <= y) 
    cout << z << " " << x << " " << y << endl; 
else 
    cout << z << " " << y << " " << x << endl; 

if (x <= y) { 
    if (z <= x) { 
     cout << z << " " << x << " " << y << endl; 
    } else { 
     if (z <= y) { 
      cout << x << " " << z << " " << y << endl; 
     } else { 
      cout << x << " " << y << " " << z << endl; 
     } 
    } 
} else { 
    if (z >= x) { 
     cout << y << " " << x << " " << z << endl; 
    } else { 
     if (y >= z) { 
      cout << z << " " << y << " " << x << endl; 
     } else { 
      cout << y << " " << z << " " << x << endl; 
     } 
    } 
} 
+2

我觉得你缺乏格式化令人不安的... –

+0

如何将这个switch语句的工作?个案的价值是什么?案例值是编译时间常量,而不是运行时值。要么坚持这些if()语句,要么提出一个更好的解决方案。 – PaulMcKenzie

回答

0

在您的特定情况下的答案是you can't
你的if语句有特定的条件,其中,
就不是一个switch中真正发挥作用。

,可以是
翻译成switchif/else if/else语句的一个例子是:

if(i == 1) { 
    // code here 
} else if(i == 2) { 
    // code here 
} else if(i == 3) { 
    // code here 
} else { 
    // code here 
} 

这将转化为:

switch(i) { 
    case 1: 
     //code here 
     break; 
    case 2: 
     //code here 
     break; 
    case 3: 
     //code here 
     break; 
    default: 
     //code here 
     break; 
} 

希望帮助了一下多了解一些关于switch的陈述。

3

这不是编写程序的好方法。如果你需要4个整数呢? 其中一种方法是使用像std::vector这样的列表并对其进行排序。

vector<int> numbers; 

int number = 0; 
while (numbers.size() < 3 && cin >> number) 
    numbers.push_back(number); 

sort(cbegin(numbers), cend(numbers)); // sorts ascending by default 

for (auto number : numbers) 
    cout << number << " "; 

cout << endl; 

您还可以使用std::multiset,它会在插入项目时自动对它们进行排序。

+0

这将成功填补0的数字像 “不是一个数字”输入 –

+0

@Alex你说得对,我没有输入的评价打扰,我希望把重点放在程序流程。问题是关于if/switch结构,但我会编辑答案。 – Excelcius

1

而是这种方法的,你为什么不存储输入数组中,并尝试任何排序算法的进行梳理你的输入?

0

如果面临的挑战是,你不能分类编号,并且限制为3点的整数,然后有更好的方式来完成自己在做什么。

#include <iostream> 
using namespace std; 

int main() 
{ 
    int combo[6][3] = {{0,1,2},{0,2,1},{1,0,2},{1,2,0},{2,0,1},{2,1,0}}; 
    int values[3]; 
    cin >> values[0] >> values[1] >> values[2]; 
    for (int i = 0; i < 6; ++i) 
    { 
     if (values[combo[i][0]] <= values[combo[i][1]] && 
      values[combo[i][1]] <= values[combo[i][2]]) 
     { 
      cout << values[combo[i][0]] << " " << values[combo[i][1]] << 
       " " << values[combo[i][2]]; 
      break; 
     } 
    } 
} 

组合数组包含所有可能发生3个插槽的组合。还要注意输入是一个数组。即使你没有使用循环,就需要最大IF()语句是6

但是你必须提到了前面,这是一个挑战,什么限制都。否则,请查看有关存储和分类这些数字的其他答案。

0

你只需要三个条件交换排序三个元素的列表:

int x, y, z; 
cout << "please enter three integers:"; 
cin >> x >> y >> z; 

if (y < x) swap(y, x); 
if (z < y) swap(z, y); 
if (y < x) swap(y, x); 

cout << x << " " << y << " " << z << endl; 

注意,这种方法不能扩展。对于10个号码,您已经需要45个条件掉期。