我正在学习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
这里有什么问题?
答案 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;
}