C++ 有没有更简单的方法从用户那里获取三个数字并按升序打印?

C++ 有没有更简单的方法从用户那里获取三个数字并按升序打印?,c++,if-statement,C++,If Statement,我正在完成比亚恩·斯特劳斯特普的书《使用C++的原则和实践》(第3章练习6)中的练习。您需要制作一个程序,接受用户输入(3个整数值),并按从最小到最大的顺序打印3个数值。这是我的解决方案 #include <iostream> #include <string> using namespace std; int main() { cout << "Please enter 3 integers: "; int num1, num2, num3

我正在完成比亚恩·斯特劳斯特普的书《使用C++的原则和实践》(第3章练习6)中的练习。您需要制作一个程序,接受用户输入(3个整数值),并按从最小到最大的顺序打印3个数值。这是我的解决方案

#include <iostream>
#include <string>
using namespace std;

int main()
{
    cout << "Please enter 3 integers: ";
    int num1, num2, num3;
    while (cin >> num1 >> num2 >> num3) {

    if (num1 < num2 && num2 < num3)
        cout << num1 << ", " << num2 << ", " << num3 << endl;

    if (num2 < num1 && num1 < num3)
        cout << num2 << ", " << num1 << ", " << num3 << endl;

    if (num3 < num1 && num1 < num2)
        cout << num3 << ", " << num1 << ", " << num2 << endl;

    if (num1 > num2 && num1 > num3 && num2 < num3)
        cout << num2 << ", " << num3 << ", " << num1 << endl;

    if (num1 > num2 && num1 > num3 && num2 > num3)
        cout << num3 << ", " << num2 << ", " << num1 << endl;

    if (num1 < num2 && num1 < num3 && num2 > num3)
        cout << num1 << ", " << num3 << ", " << num2 << endl;

    if (num1 == num2 && num1 < num3)
        cout << num1 << ", " << num2 << ", " << num3 << endl;

    if (num1 == num3 && num3 < num2)
        cout << num1 << ", " << num3 << ", " << num2 << endl;

    if (num1 == num2 && num1 > num3)
        cout << num3 << ", " << num2 << ", " << num1 << endl;

    if (num1 == num3 && num2 < num3)
        cout << num2 << ", " << num3 << ", " << num1 << endl;

    if (num3 == num2 && num1 < num3)
        cout << num1 << ", " << num2 << ", " << num3 << endl;

    if (num3 == num2 && num1 > num3)
        cout << num3 << ", " << num2 << ", " << num1 << endl;
   }
}
#包括
#包括
使用名称空间std;
int main()
{
cout>num1>>num2>>num3){
如果(num1cout您可以将值添加到
向量
,然后对其进行
排序
并按顺序输出值

#include <algorithm>
#include <iostream>
#include <vector>

int main()
{
    std::cout << "Please enter 3 values" << '\n';
    std::vector<int> values;
    for (int i = 0; i < 3; ++i)
    {
        int value;
        std::cin >> value;
        values.push_back(value);
    }
    std::sort(values.begin(), values.end());
    std::cout << values[0] << ", " << values[1] << ", " << values[2] << '\n';

    return 0;
}
void PrintNumbers(int a, int b, int c) {
    cout << a << ", " << b << ", " << c << endl;
}
#包括
#包括
#包括
int main()
{
std::cout值;
值。推回(值);
}
排序(values.begin(),values.end());

std::cout如果要将数字存储在顺序数据结构(数组、lits、deque)中而不是单独的变量中,则可以使用更简单的算法:

  • 对序列进行排序
  • 按顺序打印序列

C++标准库有一个排序算法:
std::sort

函数有助于减少冗余。您可以创建一个函数,将三个数字按顺序打印出来

#include <algorithm>
#include <iostream>
#include <vector>

int main()
{
    std::cout << "Please enter 3 values" << '\n';
    std::vector<int> values;
    for (int i = 0; i < 3; ++i)
    {
        int value;
        std::cin >> value;
        values.push_back(value);
    }
    std::sort(values.begin(), values.end());
    std::cout << values[0] << ", " << values[1] << ", " << values[2] << '\n';

    return 0;
}
void PrintNumbers(int a, int b, int c) {
    cout << a << ", " << b << ", " << c << endl;
}
另外,如果您考虑使用数组,您可以创建一个排序方法,该方法接受数组并返回一个排序数组。然后您可以编写一个方法,使
num1
始终是最小的,
num2
始终是中间的,
num3
始终是最大的。这将允许您基本上

拥有这两种方法(一种用于排序,另一种用于打印)将使主函数的这一部分基本上变成两行代码

SortNumbers(num1, num2, num3);
PrintNumbers(num1, num2, num3);
或者如果您使用数组(如果可以,我建议您这样做)


您可以这样做:

int main()
{
    std::vector<int> values;

    for (int i = 0; i < 3; ++i)
    {
        int value;
        std::cin >> value;
        values.push_back(value);
    }
    std::cout << std::fminf(std::fminf(values[0], values[1]), values[2]);
    std::cout << std::fmaxf(std::fminf(values[0], values[1]), std::fminf(values[1], values[2]));
    std::cout << std::fmaxf(std::fmaxf(values[0], values[1]), values[2]);

}
intmain()
{
std::向量值;
对于(int i=0;i<3;++i)
{
int值;
标准:cin>>值;
值。推回(值);
}
std::cout一些规则

如果有一组数据需要统一处理,除了可能按顺序处理外,则需要使用数组

如果你想把东西按特定的顺序排列,你可以对它们进行排序

如果您不需要在事后对其进行未排序,则可以将其排序到位

不要
使用名称空间std;
这是一个非常坏的习惯

std::cout << "Please enter 3 integers: ";
int num[3]; // an array of 3 integers
while (std::cin >> num[0] >> num[1] >> num[2] {
  std::sort( std::begin(num), std::end(num) );
  std::cout << num[0] << ", " << num[1] << ", " << num[2] << "\n";
}
现在我可以通过在一个点上改变计数来改变我处理的整数的数量。在计算机科学中有4个数字:0,1,2和无穷大

现在,我们在编译时硬编码多少个整数。这有时是个好主意,有时不是

std::size_t count; 
std::cout << "How many integers at a time?";
if (!std::cin >> count) return -1;
std::vector<int> num(count); // an array of count integers
std::cout << "Please enter " << count << " integers: ";
while ( [&]{
  for (int& n:num)
    if (!std::cin >> n) return false;
  return true;
}()) {
  std::sort( std::begin(num), std::end(num) );
  for (int& n:num) {
    if (&n != num.data()) std::cout << ", ";
    std::cout << n;
  }
  std::cout << "\n";
}
std::size\u t count;
std::cout>count)返回-1;
std::vector num(count);//计数整数数组

std::cout不使用阵列的我的解决方案:

无效顺序_整数(){ INTA、b、c

cout << "Enter 3 integers: \n";
cin >> a >> b >> c;
if (a <= b && a <= c) {
    if (b <= c) cout << a << ' ' << b << ' ' << c << endl;
    if (c <= b) cout << a << ' ' << c << ' ' << b << endl;
}

else if (b <= a && b <= c) {
    if (a <= c) cout << b << ' ' << a << ' ' << c << endl;
    if (c <= a) cout << b << ' ' << c << ' ' << a << endl;
}

else if (c <= a && c <= b) {
    if (a <= b) cout << c << ' ' << a << ' ' << b << endl;
    if (b <= a) cout << c << ' ' << b << ' ' << a << endl;
}
cout>a>>b>>c;

如果(a)使用数组可能会有帮助。数组的排序你可以通过编写一个方法
bool-isInOrder(x,y,z)来简化它
返回
true
如果
x与Ed的数组建议一致,则返回
true。在结束前做个混蛋:使用基于范围的for@bolov是的,但是你需要检查在哪里插入逗号,然后…所以我变懒了:)
std::sort(开始(值),结束(值))
在我看来总是更自然,但我想这是品味的问题。(对于未来的读者来说,这两种变体的作用完全相同。)作弊:用空格而不是逗号打印:)他在书中还没有涉及向量或数组。我认为这对于他已经教过的内容来说是一个有点奇怪的练习,但是谢谢你的帮助,当他涉及向量或数组时,肯定会回顾一下。你的输出将变得越来越小,仍然有问题。输入4 3 1输出是114慢慢来,伙计..如果你解决了这个问题,我就要投票了:)
cout << "Enter 3 integers: \n";
cin >> a >> b >> c;
if (a <= b && a <= c) {
    if (b <= c) cout << a << ' ' << b << ' ' << c << endl;
    if (c <= b) cout << a << ' ' << c << ' ' << b << endl;
}

else if (b <= a && b <= c) {
    if (a <= c) cout << b << ' ' << a << ' ' << c << endl;
    if (c <= a) cout << b << ' ' << c << ' ' << a << endl;
}

else if (c <= a && c <= b) {
    if (a <= b) cout << c << ' ' << a << ' ' << b << endl;
    if (b <= a) cout << c << ' ' << b << ' ' << a << endl;
}