求助,为啥全WA

P1914 小书童——凯撒密码

LFY1201 @ 2019-09-17 00:19:15

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,i;
    char code[51];
    scanf("%d",&n);//读入n
    getchar();//读取换行符,避免影响下步骤
    for(i=0;(code[i]=getchar())!='\n';i++)
        printf("%c",(code[i]-'a'+n)%26+'a');//读取输出
    return 0;
}

by 与我常在 @ 2019-09-17 10:01:58

洛谷是在linux系统下测试的

换行符并不是'\r\n', 而是'\n'


by 与我常在 @ 2019-09-17 10:03:07

对于我这种蒟蒻这种题只敢离线做


by LFY1201 @ 2019-09-17 11:25:28

@陈年风褛丶 好的,谢谢,不过我改过来就变成了越界,然后我应用(code[i]=getchar())>='a'&&(code[i]=getchar())<='z'条件,同样全是WA。


by 与我常在 @ 2019-09-17 11:58:16

@LFY1201 您可以尝试用scanf("%s", code) 来读入, 然后用strlen读取长度,最后for循环遍历一遍,对每个字符进行操作


by 与我常在 @ 2019-09-17 12:01:48

@LFY1201 (code[i]=getchar())>='a'&&(code[i]=getchar())<='z')并且这个语句中 getchar()函数执行了两遍,相当于读取了两个字符,你最好开个char变量存取本次读取的字符,在进行判断


by 与我常在 @ 2019-09-17 16:42:25

@LFY1201

#include <cstdio>

int main() {
    int n;
    char code;
    scanf("%d",&n);
    getchar();  getchar();
    for(;;) {
        code = getchar();
        if(code >= 'a' && code <= 'z') printf("%c", (code - 'a' + n) % 26 + 'a');
        else break;
    }
    return 0;
}

两个getchar()分别读取'\r'与'\n'


by LFY1201 @ 2019-09-17 21:28:11

@陈年风褛丶 非常感谢您的帮助,您第一次的说明我没有理解,因此造成了后面的事情,再次表示感谢


by 与我常在 @ 2019-09-17 21:31:35

@LFY1201 我以为你懂了。。


by LFY1201 @ 2019-09-18 11:54:48

@陈年风褛丶 我那个时候以为后续结束时的时候要读入两个,没有意识到主要问题是上面的读入问题


|