按连续顺序编写3个数字C ++

时间:2016-03-14 20:10:17

标签: c++

我正在学习Bjarne Stroustrups的书。 Iam目前在第3章,我需要创建一个程序,用户输入3个数字,程序应按连续顺序输出。我搜索了网站,其他人发布了相同的练习,但我尝试按照我的方式进行,似乎存在逻辑问题,因为IDE没有发现我的源代码有任何问题。我有我的怀疑。这是源代码。

  #include "../../../std_lib_facilities.h"
int main()
{
    cout << "Enter three values\n";
    cout << "Enter the first value\n";
    int val1 = 0;
    int high = 00;
    int low = 000;
    cin >> val1;
    cout << "Enter the second value\n";
    int val2 = 0;
    cin >> val2;
    if (val1 >= val2)
        high = val1;
        low = val2;
    if (val1 <= val2)
        high = val2;
        low = val1;
    cout << endl;
    cout << "Enter the third value\n";
    int val3 = 0;
    if (val3 >= high)
        cout << low << " " << high << " " << val3;
    if (val3 <= low)
        cout << val3 << " " << low << " " << high;
    if (low < val3 < high)
        cout << low << " " << val3 << " " << high;
    cout << endl;
    return 0;

}

当我启动程序时,一切顺利,直到我输入第二个数字。在那个例子中,程序输出4个值,然后继续移动到第三个命令。它很奇怪我不知道,但它必须是int低,高,val1和val2的赋值。以下是示例输出:

Enter three values
Enter the first value
5
Enter the second value
4

Enter the third value
0 5 55 0 5

这里有什么问题?

3 个答案:

答案 0 :(得分:2)

您的代码存在一些问题。

int high = 00;

这不是错误,但您无意中使用了您可能不理解的语言功能。当您在数字前面加0时,编译器会理解这意味着您的数字是八进制值。 00恰好与0相同,但一般来说,最好将这些行写为int high = 0;,或者更好地写int high;

if (val1 >= val2)
    high = val1;
    low = val2;

high = val1;位于if的声明中,但low = val2;不是。你显然想要

if (val1 >= val2)
{
    high = val1;
    low = val2;
}

大多数代码审核指南建议对所有if / while / for语句使用{}(包括1行语句!),因为这是一个如此隐蔽的错误。

cout << "Enter the third value\n";
int val3 = 0;
if (val3 >= high)

你真的没有读过第三个值。这就是程序在输入第二个值后继续完成的原因。你可能打算......

cout << "Enter the third value\n";
int val3 = 0;
cin >> val3;
if (val3 >= high)

整体结构

编程中有一个原则是将输入读取代码与程序逻辑的其余部分分开。它只是让事情更容易理解。对于某些程序来说,这很难做到,但不是你的。我建议像这样重写代码......

int main() 
{
  // First read in values from the user.
  int val1, val2, val3;
  cout << "Enter three values\n";
  cout << "Enter the first value\n";
  cin >> val1;
  cout << "Enter the second value\n";
  cin >> val2;
  cout << "Enter the third value\n";
  cin >> val3;
  // You could add a logging statement here to verify your input code is working.

  // Now print val1, val2, val3 in consecutive order
  // Rest of the code goes here.

像这样构建代码使得I / O问题更容易找到。使用上面的代码布局,显然会遗漏cin >> val3

答案 1 :(得分:0)

嗯,你搞砸了两件事,一个是算法,另一个是语言的使用。算法是您需要的方式,语言的使用是您使用语言中的工具表达自己的能力。现在你想要做的是清楚,但你搞砸的第一件事就是使用if。您已经使用了所有if s,这是在您的条件彼此独立时完成的,就像您要检查两个条件是否为真,您打印&#34;是&#34;两次。例如:

if(/*condition 1*/)
    cout<<"YES\n";
if(/*condition 2*/)
    cout<<"YES\n";  

在您的问题中,数字可以更大,也可以更小或更少。以我写的方式实现你的代码对你来说很容易阅读和写作。

 #include "../../../std_lib_facilities.h"

int maximum(int a, int b){
    if(a>b)
        return a;
    return b;
}

int minimum(int a, int b){
    if(a<b)
        return a;
    return b;
}

int main()
{
    int val1, val2, val3;
    cout << "Enter three values you bastard1\n";
    cout << "Enter the first value\n";
    cin >> val1;
    cout << "Enter the second value\n";
    cin >> val2;
    cout << "Enter the third value\n";
    cin>> val3;
    cout<<"The numbers in order are:\n";
    int a,b,c;
    a = minimum(val1 , minimum(val2,val3));
    c = maximum(val1 , maximum(val2,val3));
    b = val1 + val2 + val3 - a - c;
    cout<< a << " " << b << " " <<c<<"\n";
    return 0;

}

答案 2 :(得分:0)

谢谢大家的回答,这是结束。它正在发挥作用。它唯一的问题似乎是在对数字进行排序之后重复最后一个IF语句,除非在语句成立的情况下。 (当val3大于最低值但小于最高值时。

#include "../../../std_lib_facilities.h"
int main()
{
    cout << "Enter three values\n";
    cout << "Enter the first value\n";
    int val1 = 0;
    int high = 0;
    int low = 0;
    cin >> val1;
    cout << "Enter the second value\n";
    int val2 = 0;
    cin >> val2;
    high = (val1 >= val2) ? val1 : val2;
    low = (val1 <= val2) ? val1 : val2;
    cout << "Enter the third value\n";
    int val3 = 0;
    cin >> val3;
    if (val3 >= high)
    {
        cout << low << " " << high << " " << val3;
    }
    if (val3 <= low)
    {
        cout << val3 << " " << low << " " << high;
    }
    if (low<val3<high)
    {
        cout << low <<" "<< val3<<" " << high;
    }

    cout << endl;
    return 0;

}