dreamlike @ 2023-02-10 02:15:02
想问问各位大神开启O2优化和不开启的区别是什么?不开启优化的话1,4,7爆红,开启后就没问题了,代码如下:
#include<stdio.h>
int main(){
int a,b,c,d,g,h,i,j,k,z,x,y;
char m;
scanf("%1d-%1d%1d%1d-%1d%1d%1d%1d%1d-%c",&a,&b,&c,&d,&g,&h,&i,&j,&k,&z);
x=a*1+b*2+c*3+d*4+g*5+h*6+i*7+j*8+k*9;
y=x%11;
if(y==10&&z!='X'){
m='X';
printf("%1d-%1d%1d%1d-%1d%1d%1d%1d%1d-%c",a,b,c,d,g,h,i,j,k,m);
}
else if(z-48==y||y==z-78)
printf("Right");
else
printf("%1d-%1d%1d%1d-%1d%1d%1d%1d%1d-%1d",a,b,c,d,g,h,i,j,k,y);
return 0;
}
by ud2_ @ 2023-02-10 02:17:35
出现这种情况一般是代码写错了。这里的错误是尝试用 %c
读入 int
类型的变量 z
。
by Eleveslaine @ 2023-02-10 06:28:08
@dreamlike 开o2可以提升程序运行速度
例如邻接矩阵的
但是也有些程序不能开o2,称为厌氧程序,例如你的程序。
by BeBanned @ 2023-02-10 07:33:38
@Franz_Liszt 它的代码不是厌氧程序吧。。。他不是说02才能过么。。。
by Coffins @ 2023-02-10 07:36:31
@Franz_Liszt 他这个是程序有问题罢,开了才A掉
by cancan123456 @ 2023-02-10 08:56:39
是有未定义行为,这时有没有 O2 会影响结果
by Eleveslaine @ 2023-02-10 20:04:06
咳咳,看错了。
by dreamlike @ 2023-02-10 23:05:15
@ud2_ 一开始有考虑这个问题,但换成%d也报错,看题解也没有思路,可以问问有无方法改掉这个错误么
by dreamlike @ 2023-02-10 23:06:01
@Franz_Liszt 虽然但是,谢谢你的科普!!!
by dreamlike @ 2023-02-10 23:07:45
@cancan123456 请问定义出错也就是不匹配,也是属于未定义行为么
by ud2_ @ 2023-02-10 23:17:31
@dreamlike 把 z
的类型换成 char
。
既然要输入的是 一个字符,那么 %c
(对应的类型是 char
)最为合适。%d
没法解析输入数据中可能出现的 X。