Kelly_1 @ 2024-01-07 21:25:20
# include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
char b = getchar();
char a[100] = "0", c;
int i = 0;
while ((b = getchar()) != '\n')
{
a[i] = c;
i++;
}
int j = 0;
for (j = 0;j < i;j++)
{
a[j] = a[j] + n;
}
for (j = 0;j < i;j++)
{
printf("%c", a[j]);
}
return 0;
}
by Dangerise @ 2024-01-07 21:43:53
建议尽早学习STL 使用string代替char[]
char[]的输入可以使用scanf("%s"),不用手动输入
RE一般由UB引起,所谓UB指未定义行为(Undefined Behavior),UB是编译器无法保障的行为,即有可能正确运行,也有可能崩溃,程序中应极力避免UB,常见的UB有数组下标越界。有许多UB在没有优化的情况下会正常工作,但是开启优化之后就会RE
AC代码
#include <bits/stdc++.h>
char a[100];
int main() {
int n = 0;
scanf("%d", &n);
scanf("%s", a);
int len = strlen(a);
for (int i = 0; i < len; i++) {
int c = a[i]; //注意这里char类型+26很可能直接越界,所以先转成int
c += n;
//如果超过'z',就要回到'a'
if (c > 'z') {
c -= 26;
}
a[i] = c;
}
printf("%s", a);
return 0;
}
by Kelly_1 @ 2024-01-08 10:47:06
@Dangerise 谢谢。但我还是想知道我这个代码是因为什么RE,是数组下标越界还是什么?
by Dangerise @ 2024-01-08 10:52:20
@Kelly_1 抱歉不太看得出来
by Kelly_1 @ 2024-01-08 15:27:05
@Dangerise 好的,麻烦了