自己测完全没问题,不懂为啥不对。。。

P1914 小书童——凯撒密码

xiao__ma @ 2022-01-05 22:33:01

#include <stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    n=n%26; 
    char c,a[50];
    c=getchar();
    while((c=getchar())!='\n')
    {
        if((c+n)<='z')
        printf("%c",c+n);
        else
        printf("%c",c+n-1-'z'+'a');
    }
}

by DengStar @ 2022-01-05 23:24:46

这问题我必须回答。我以前也遇到过这样的问题。我在本机上测试没有任何问题,一提交就爆零,调了几个月,人都傻了。事实上问题很简单:不同系统下的回车不一样,有的是\n,有的是\n\r。你的代码只判了·\n,这一行代码while((c=getchar())!='\n')改成while((c=getchar())!='\n')&&c!='\r'即可


by DengStar @ 2022-01-05 23:27:02

等下,好像哪里出问题了


by DengStar @ 2022-01-05 23:37:43

#include <iostream>
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    n=n%26; 
    char c,a[50];
    while(cin>>c)
    {
        if((c+n)<='z')printf("%c",c+n);
        else printf("%c",c+n-1-'z'+'a');
    }
}

用cin读入可以过滤掉空白字符


by DengStar @ 2022-01-05 23:38:27

尽量不要用char读入,用字符串


by DengStar @ 2022-01-05 23:39:31

还有你应当return 0


by _Imaginary_ @ 2022-01-06 06:47:03

@RDFZdsd lz好像是c不是c++


by DengStar @ 2022-01-06 11:43:50

#include <stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    n=n%26; 
    char c,a[50];
    getchar();
    while(scanf("%c",&c)!=EOF)
    {
        if(c=='\r'||c=='\n') continue;
        if((c+n)<='z')    printf("%c",c+n);
        else    printf("%c",c+n-1-'z'+'a');
    }
    return 0;
}

c的版本


by DengStar @ 2022-01-06 11:46:18

原来不对是因为输入根本就没有回车,你自己测没问题是因为你自己打了一个回车……所以必须要用EOF判断。但是这一行if(c=='\r'||c=='\n') continue;不能去掉,我也不知道为什么。


by DengStar @ 2022-01-06 11:52:40

#include <stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    n=n%26; 
    char c,a[50];
    getchar();getchar();
    while(scanf("%c",&c)!=EOF)
    {
//      if(c=='\r'||c=='\n') continue;
        if((c+n)<='z')    printf("%c",c+n);
        else    printf("%c",c+n-1-'z'+'a');
    }
    return 0;
}

好吧,现在我知道原因了,因为第一行的n后面同样有2个字符\n\r,因此getchar()要用两次……这份代码在本机的Windows系统上是错的,但是交上去是对的,因为评测机是Linux系统,两个系统的回车不一样。所以说尽量少用char读入,如果必须要用char读入的话最好在Linux的虚拟机上测一下


by xiao__ma @ 2022-07-20 15:03:09

@RDFZdsd 谢谢巨巨!


|