我的 C++ 代码有什么问题?对于 a = 90 Z 应该等于 -1,但我得到完全不同的答案。为什么?
What's wrong with my c++ code? for a = 90 Z should be equal to -1, but I'm getting completly different answer. Why?
我试图编写可以计算三角函数的代码,但它出错了,我不知道该怎么做,因为我看不到任何错误
using namespace std;
#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <iostream>
#include <conio.h>
#include <cmath>
int main()
{`
const double pi = M_PI;
double Z, a, sin1, cos1, X, Y;
//printf("Input a =");
printf("%s", "Input a = ");
scanf("%g", &a);
a = a * pi / 180;
sin1 = sin(3 * pi - 2 * a);
X = (sin1 * sin1)*2;
cos1 = cos(5 * pi - 2 * a);
Y = cos1 * cos1;
Z = X - Y;
printf("Z = %g\n\n", Z);
_getch();
return 0;
}`
如上述评论所述,启用编译器警告消息应该表明问题并提出解决方案,因此删除_CRT_SECURE_NO_WARNINGS
可能有助于查看问题和解决方案:
(15,11): warning C4477: 'scanf' : format string '%g' requires an argument of type 'float *', but variadic argument 1 has type 'double *'
(15,11): message : consider using '%lg' in the format string
(15,5): error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
使用编译器时建议:
scanf("%lg", &a);
如上述评论中所述,我们仍然收到有关使用 scanf
:
的警告
(15,5): error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
因此,当我们包含 _CRT_SECURE_NO_WARNINGS
并获得预期输出时继续使用 scanf
,但是使用编译器建议的 scanf_s
(并删除 _CRT_SECURE_NO_WARNINGS
)也会产生预期的结果输出。
但是,由于您包含了 iostream
,c++ 提供了 class iostream 的 cin
对象,因此最简单的解决方案可能是按照建议使用 cin
在上面的评论中。
我试图编写可以计算三角函数的代码,但它出错了,我不知道该怎么做,因为我看不到任何错误
using namespace std;
#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <iostream>
#include <conio.h>
#include <cmath>
int main()
{`
const double pi = M_PI;
double Z, a, sin1, cos1, X, Y;
//printf("Input a =");
printf("%s", "Input a = ");
scanf("%g", &a);
a = a * pi / 180;
sin1 = sin(3 * pi - 2 * a);
X = (sin1 * sin1)*2;
cos1 = cos(5 * pi - 2 * a);
Y = cos1 * cos1;
Z = X - Y;
printf("Z = %g\n\n", Z);
_getch();
return 0;
}`
如上述评论所述,启用编译器警告消息应该表明问题并提出解决方案,因此删除_CRT_SECURE_NO_WARNINGS
可能有助于查看问题和解决方案:
(15,11): warning C4477: 'scanf' : format string '%g' requires an argument of type 'float *', but variadic argument 1 has type 'double *'
(15,11): message : consider using '%lg' in the format string
(15,5): error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
使用编译器时建议:
scanf("%lg", &a);
如上述评论中所述,我们仍然收到有关使用 scanf
:
(15,5): error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
因此,当我们包含 _CRT_SECURE_NO_WARNINGS
并获得预期输出时继续使用 scanf
,但是使用编译器建议的 scanf_s
(并删除 _CRT_SECURE_NO_WARNINGS
)也会产生预期的结果输出。
但是,由于您包含了 iostream
,c++ 提供了 class iostream 的 cin
对象,因此最简单的解决方案可能是按照建议使用 cin
在上面的评论中。