关于输出格式 为什么用puts输出不行?

P1914 小书童——凯撒密码

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 学到了 谢谢


|