求大佬洛谷对gets的判定原理

P1914 小书童——凯撒密码

adaminchina @ 2018-11-07 12:41:47

include<stdio.h>

include<string.h>

int main()

{

int n,i,len;
char a[51];
scanf("%d",&n);
getchar();
gets(a);
len=strlen(a);
for(i=0;i<len;i++)
{
    printf("%c",(a[i]+n-'a')%26+'a');
}
return 0;

} 这个输出是全wrong的。

include<stdio.h>

include<string.h>

int main() {

int n,i,len;
char a[51];
scanf("%d%s",&n,a);
len=strlen(a);
for(i=0;i<len;i++)
{
    printf("%c",(a[i]+n-'a')%26+'a');
}
return 0;

} 但只要把中间字符的输入改成别的形式,就全AC了。 而这两行代码在本机上的测试,输出是没差别的。

求解是是什么原理。百度不到。


by Bader @ 2018-11-07 12:45:35

+1


by King_of_gamers @ 2018-11-07 12:50:11

希望更丰富的展现?使用Markdown


by wuzhaoxin @ 2018-11-07 12:51:12

gets会读到换行符,而windows和Linux的换行符不一样


by info___tion @ 2018-11-07 12:51:38

gets()不是向来就有bug的吗

你要真的想用就用fgets(...,stdin)吧,gets()bug很多


by adaminchina @ 2018-11-07 14:43:18

@wuzhaoxin

百度了一下发现两者的区别是\n和\r\n,我没有Linux系统,无法验证。

请问gets对两者的区别是什么呢?是在Linux中无法读取到换行符导致不能结束?还是其他什么原因呢?


by suyeyue @ 2018-12-02 12:14:53

同问qwq


|