VScode上可以,提交全WA,看不出哪里有问题,求助欸~

P1914 小书童——凯撒密码

iponika @ 2023-10-08 22:53:02

#include<stdio.h>
#include<stdlib.h>
//97a~122z
int main(void)
{
    int n, i = 0;
    char str[50] = {0};
    scanf("%d", &n);
    getchar();
    gets(str);
    //while((str[i] = getchar()) != EOF)
    //    ++i;
    str[i] = 0;
    for(i = 0; str[i] != 0; ++i)
        str[i] = (str[i] + n - 97) % 26 + 97;
    printf("%s", str);
    system("pause");
    return 0;
}

by Linune_Gump @ 2023-10-08 23:03:28

不太理解为啥VSCode上可以,很容易就会发现,不管你输入啥都不会有输出。因为

str[i] = 0;
for(...; str[i] != 0; ...)

所以这个for根本不会被执行

顺便提一嘴,system("pause")不知道在你谷行不行,反正看着很难受

至于怎么改嘛……不太懂为什么要让str[i]=0,这个判断条件也不是很理解。嗯,其他应该没什么,改了应该就能A了


by Linune_Gump @ 2023-10-08 23:08:50

@Linune_Gump 其实……改了还不行

这个写代码的习惯上好像不是很正统,,,算法性的问题就是上面的两条


by iponika @ 2023-10-10 23:51:48

@Linune_Gump 呃呃,抱歉,在vscode上可以运行的是把gets注释掉,然后把下面被注释的两行恢复,而且还要把EOF换成'\n'的版本。 str[i]=0是为了用0替换掉'\n',给刚输入的字符串标记尾部。我觉得既然i==0,那个for还是会执行的吧? 关于system("pause"),孩子昨天刚用上调试器,原谅则个,,,


by iponika @ 2023-10-10 23:52:33

@iponika 这个回复系统怎么换行啊...


by Linune_Gump @ 2023-10-21 16:46:18

@iponika 哦哦哦我明白了,你要不看看注释完那个while之后i会是多少(狗头)

markdown的换行的话就是敲两个换行。


|