为什么是0分呀.....

P1914 小书童——凯撒密码

pqy000 @ 2018-09-10 17:23:01

#include<iostream>
#include<string.h>
using namespace std;

char s[55];
int n;

int main() {
    scanf("%d",&n); getchar();

    gets(s);
    int len = (int)strlen(s);

    for(int i = 0; i < len; i++) { s[i] = (s[i] - 'a' + n) % 26 + 'a'; }
    cout << s;

    return 0;
}

by pqy000 @ 2018-09-10 17:23:19

求解答,谢谢诸位大佬...


by Viston @ 2018-09-10 17:34:02

#include<stdio.h>
#include<string.h>
int main()
{
    int n,i,j,k;
    char ch[100];
    scanf("%d %s",&n,ch);
    int l=strlen(ch);
    for(i=0;i<l;i++)
    {
        ch[i]=((ch[i]-'a')+n)%26+('a');
    }
    puts(ch);
    return 0;
}

by Viston @ 2018-09-10 17:34:53

@pqy000 你貌似多读了一个回车(大佬别打我脸)


by 猫猬兽 @ 2018-09-10 18:00:48

把gets换其他读入方式


by pqy000 @ 2018-09-10 19:56:17

@Viston 谢谢您,问题解决了.... 因为之前我发现如果先读入数字,再读入字符串的话会结束不了,所以我养成了getchar()来处理读入的换行符的方案,我将代码改成如下,即AC了..

    scanf("%d",&n); //getchar();
    scanf("%s", s);

话说大佬请问您,遇到之前先读入数字,再读入字符串有没有更好的解决方案,谢谢。


by pqy000 @ 2018-09-10 19:57:54

@李俊睿 好的,谢谢您,问题解决了我将问题改成了

    scanf("%d",&n); //getchar();
    scanf("%s", s);

即可..不过我还是比较好奇,为何我之前采用以下两种读入方法均报错,谢谢。

//way1
string s;
getline(cin, s);

//way2
char s[55];
gets(s);

by Wgp19981201 @ 2018-09-25 16:33:36

getch(); 换成
fflush(stdin);


|