real1ze @ 2021-03-01 20:18:33
如下两个代码:
A:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
char a[100];
int n;
int main(){
scanf("%d",&n);
n%=26;
getchar();
scanf("%s",&a);
for(int i=0;i<100;i++){
if(a[i]+n>=128){
a[i]=a[i]-26+n;
continue;
}
if(a[i]>=97&&a[i]<=122){
a[i]=a[i]+n;
}
a[i]=(a[i]>122)?(a[i]-26):(a[i]);
}
printf("%s",a);
}
这个可以通过 但一变成:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
char a[100];
int n;
int main(){
scanf("%d",&n);
n%=26;
getchar();
gets(a);
for(int i=0;i<100;i++){
if(a[i]+n>=128){
a[i]=a[i]-26+n;
continue;
}
if(a[i]>=97&&a[i]<=122){
a[i]=a[i]+n;
}
a[i]=(a[i]>122)?(a[i]-26):(a[i]);
}
puts(a);
}
就不行 区别仅是用gets和puts读取输出和用scanf与printf的读取输出 求问为什么会这样?以后有什么类似要注意的地方吗?谢谢!
by real1ze @ 2021-03-01 20:19:03
ps:B代码五个点全WA
by _caiji_ @ 2021-03-01 20:20:54
gets
老特性了。B 代码改成这样也能过:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
char a[100];
int n;
int main(){
scanf("%d",&n);
n%=26;
getchar(),getchar();//多吃一个换行
gets(a);
for(int i=0;i<100;i++){
if(a[i]+n>=128){
a[i]=a[i]-26+n;
continue;
}
if(a[i]>=97&&a[i]<=122){
a[i]=a[i]+n;
}
a[i]=(a[i]>122)?(a[i]-26):(a[i]);
}
puts(a);
}
by _caiji_ @ 2021-03-01 20:23:42
建议看一下这篇文章
by real1ze @ 2021-03-02 12:47:59
@caijianhong
OK 学到了 谢谢