我正在从Java转移到C和C ++,我遇到了这类最简单的任务问题所以如果可以,请帮助我:
#include<stdio.h>
#include<math.h>
void main()
{
int a, h;
double interres;
double base;
printf("Input a: ");
scanf("%d", &a);
printf("Input height h: ");
scanf("%d", &h);
base =(a^2 * sqrt(3))/ 4;//line 13
interres = a ^ 2 * sqrt(3);//line 14
printf("(%d^2*sqrt(3))/4=(%d^2*%f)/4=(%f*%f)/4=%f/4=%f cm",a,a,sqrt(3),a^2,sqrt(3),interres,base);
}
我经常出错:
error C2297: '^': illegal, right operand has type 'double' line 13
error C2297: '^': illegal, right operand has type 'double' line 14
warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. warning 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.
答案 0 :(得分:0)
几个问题:
在C和C ++中,main
返回int
,而不是void
。除非您的编译器文档明确将void main()
列为有效签名,否则使用它会调用未定义的行为。 main
应定义为
int main( void )
如果您不接受任何命令行参数,或
int main( int argc, char **argv )
如果你这样做。
其次,^
运算符是按位XOR运算符,而不是取幂运算符; C和C ++都没有指数运算符。您必须使用标准库中的pow
功能或自行滚动。
最后,scanf
在使用%s
或%[
转换说明符读取输入时,可能不安全,您不会这样做。就个人而言,我按照错误消息中的描述禁用警告。
答案 1 :(得分:-1)
#include<stdio.h>
#include<math.h>
void main()
{
int a, h;
double interres;
double base;
printf("Input a: ");
scanf("%d", &a);
printf("Input height h: ");
scanf("%d", &h);
base =(double)((a*a) * sqrt(3))/ 4;//line 13
interres =(double) (a *a) * sqrt(3);//line 14
printf("(%d^2*sqrt(3))/4=(%d^2*%f)/4=(%f*%f)/4=%f/4=%f cm",a,a,sqrt(3),a*a,sqrt(3),interres,base);
}