作者sam9595 (帕帕)
看板C_and_CPP
标题[问题] runtime error
时间Thu Feb 5 11:42:20 2009
想请问一下 为什麽有些C code 在acm用ansi C编译的时候会runtime error
但是用C++ 编译却会过
是有哪些东西在C是不能用的吗 不过我用gcc编译都是可以的
所以我想不太清楚问题在哪里
比如说下面这个例子
#10589
#include<stdio.h>
#include<math.h>
int inorout(double x ,double y,double a){
double t1,t2,t3,t4;
if(x>a || y>a)
return 0;
t1=sqrt( pow(x,2)+pow(y,2) );
t2=sqrt( pow(a-x,2)+pow(y,2));
t3=sqrt( pow(x,2)+pow(a-y,2));
t4=sqrt( pow(a-x,2)+pow(a-y,2));
if(t1>a || t2>a || t3>a ||t4>a)
return 0;
else
return 1;
}
int main(){
int M,N,i;
double x,y,a;
while(1){
scanf("%d %lf",&N,&a);
if(N==0 && a==0)
break;
M=0;
for(i=0;i<N;i++){
scanf("%lf %lf",&x,&y);
if(inorout(x,y,a))
M++;
}
printf("%.5lf\n",(double)M*a*a/(double)N);
}
}
或是
#10783
#include<stdio.h>
int main(){
int Ncase,temp;
int a,b,sum=0,round=1;
char buf[100],*p;
fgets(buf,100,stdin);
for(Ncase=0,p=buf;*p>='0';Ncase=Ncase*10+*p++-'0'){}
while(Ncase){
fgets(buf,100,stdin);
for(a=0,p=buf;*p>='0';a=a*10+*p++-'0'){}
fgets(buf,100,stdin);
for(b=0,p=buf;*p>='0';b=b*10+*p++-'0'){}
if(a>b){
temp=a;
a=b;
b=temp;
}
if(a%2==0)
a++;
if(b%2==0)
b--;
for(;a<=b;a+=2){
sum+=a;
}
printf("Case %d: %d\n",round++,sum);
sum=0;
Ncase--;
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.30.84
1F:推 ledia:runtime error 是程式执行时的错误 02/05 11:52
2F:→ ledia:跟 compile error 是不一样的 02/05 11:52
3F:→ ledia:合语法的 compile 都会过 02/05 11:52
4F:→ sam9595:恩 我知道 不过为何同样的code执行结果会不一样呢 02/05 12:13
5F:推 ledia:因为 input 不一样呀 ._. 02/05 14:11
6F:→ fjm31714:runtime error跟input有关吗? 02/05 15:06
7F:推 ledia:of course 02/05 15:17
8F:推 ledia:鸡同鸭讲... 我弄错原 post 要问的意思了 02/05 15:20
9F:→ ledia:是说为什麽你的 main 都没 return value 呀? 02/05 15:20
10F:→ fjm31714:对吼有可能....不过ACM的测资不是都一样吗? 02/05 15:36
11F:推 ledia:我以为他的意思是自己测没问题, 送去测 runtime error 02/05 15:44
12F:→ ledia:那就的确可能是 input 造成的差异 02/05 15:44
13F:推 fjm31714:应该是C++ AC 可是 C RE 02/05 15:46
14F:→ sam9595:恩 对 感谢 应该是因为我没有return值的关系 02/05 15:59