我对C ++很陌生,现在我正在学校学习一门入门课程。本周的任务之一是解决一个相当冗长的等式。所以我所做的就是把它分解成小块。当我尝试使用sin函数时,我一直得到奇怪的输出,所以我开始搞砸了一点并把它隔离到了......
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double input1, input2, a;
cout << "Enter first input." << endl;
cin >> input1;
cout << "Enter second input." <<endl;
cin >> input2;
a = input2 - input1*2;
cout << a << endl; // This doesn't give expected output
cout << input2 - 2*input1 <<endl; //This gives the expected result
return 0;
}
作为一个返回值,我得到一个非常小的数字:6.95323e-310
。显而易见的问题是,为什么?
如果它有帮助我在Mac OS上使用g ++ 4.2进行此操作。
我的输入值是5和2 ......所以我希望-8
。
感谢。
答案 0 :(得分:1)
您发布的代码在各种编译器下对我来说很好,但我会建议一些改进:
cout << input2 - 2*input1 <<endl;
我会将此更改为cout << input2 - (2*input1) <<endl;
在使用以下修改后的代码:
进行输入之前,我还要确保cin完全清晰cout << "Enter first input." << endl;
cin.clear();
cin >> input1;
cout << "Enter second input." <<endl;
cin.clear();
cin >> input2;
我曾经设法通过偶然事件复制您的错误,并且因为输入设置不正确而发生了错误。
之后我逐步完成了程序并检查了输出:当变量设置不正确时(即它们包含的变量是在变量使用的内存位置)我总是得到类似于你发布的答案之一。
所以简单的答案是变量是未初始化的,因为没有清除cin缓冲区。
希望这会有所帮助,如果您需要更好/更深入的解释,请告诉我们。)
附录:
在阅读其他评论时我还想到了几点:
using namespace std;
- 这对你完全控制的小项目很好,即家庭作业,小作业等。但是,当你使用不同的代码(其他库,API等)时,更可取的是直接控制名称空间:它们的存在是为了允许您在给定命名空间中定位特定功能,并避免代码中的名称争用/歧义。例如,您可以在当前调用cin,稍后您可能在代码中包含另一个API,让我们将其称为TEST命名空间,因此您添加using namespace TEST
; TEST包含自己的cin实现,它自动处理cin清除(方便,因为这可以解决你的问题)但是你的代码现在无法编译,因为你有std::cin
和TEST::cin
都可用,并且因为你使用了使用两者的命名空间,当你输入cin时,它可以是。
还有一个建议是你使用浮动而不是双重,有两点要点:
0.3f
是内存使用量的一半0.3d
我知道这是为了完成家庭作业,正如你提到的那样,为什么我添加了额外的信息:获取更多信息总是好的,无论你是否同意它,都可以让你更深入地研究并且同意/证明或不同意/反驳您的初始信息。欢迎编程,顺便说一句,它只会变得更糟!
更好!我的意思更好!