返回信息流刷个简单的题,
题目:如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)*0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。
结果在VS下都能正确运行,结果提交后一直报错,然后发现是强制类型转换的原因(被注释掉的两句),后来用了floor函数就能正确运行了。但结果显示部分正确,然后显示有一种情况下运行超时,然后我想是不是因为do...while的原因,然后就改成了判断输入的结果是否大于0,大于0则求结果,否则结束,结果运行超时的情况变成了错误。
#include<stdio.h>
#include<math.h>
int main(void)
{
int height;
float tmp;
int foot,inch;
do
{
scanf("%d",&height);
}while(height <= 0);
tmp = 0.01 * height / 0.3048;
// foot = int(tmp);
// inch = int((tmp - foot) * 12);
foot = floor(tmp);
inch = floor((tmp - foot) * 12);
printf("%d %d\n",foot,inch);
return 0;
}
没在GCC下编过程,难道GCC下用强制类型转换会有问题?还有,那刚开始说超时的一种情况,后来改了后报错,是啥原因啊,求知道的指导下,谢了哈~[ema11]
这是一条镜像帖。来源:北邮人论坛 / cpp / #81988同步于 2014/8/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求教GCC编译器下强制类型转换会报错?
Smeagol
2014/8/28镜像同步16 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 Smeagol 的大作中提到: 】
: error: expected expression before 'int'
:
第几行,第几列呢?相关的代码在哪里?
foot = int(tmp);
inch = int((tmp - foot) * 12);
你的int是个函数么,就这么调用?
foot = (int)tmp;
inch = (int)((tmp - foot) * 12);
先说个小问题,floor()的原型声明是
double floor(double x);
输入输出参数类型不匹配。
最好改用floorf()
PS: LZ的Visual Studio用的哪个版本?建议用2013,因为从VS2013开始微软的编译器才完整支持C99
强制类型转换用(int)tmp;
int(tmp)应该是C++中重载的用法吧?
楼主的Code用g++可以编译通过
clu@clu-desktop:~/temp$ gcc main.c
main.c: In function ‘main’:
main.c:24:13: error: expected expression before ‘int’
main.c:25:13: error: expected expression before ‘int’
clu@clu-desktop:~/temp$ g++ main.c && ll a.out
-rwxrwxr-x 1 clu clu 8.7K Aug 29 07:53 a.out*
clu@clu-desktop:~/temp$ date
Fri Aug 29 07:53:42 CST 2014
【 在 Smeagol 的大作中提到: 】
: 刷个简单的题,
: 题目:如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)*0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。
: 结果在VS下都能正确运行,结果提交后一直报错,然后发现是强制类型转换的原因(被注释掉的两句),后来用了floor函数就能正确运行了。但结果显示部分正确,然后显示有一种情况下运行超时,然后我想是不是因为do...while的原因,然后就改成了判断输入的结果是否大于0,大于0则求结果,否则结束,结果运行超时的情况变成了错误。
: ...................