#include<stdio.h>
#define M 26
int main() {
char str[80];
int i = 0,offset;
printf("请输入初始字符串: ");
//回车表示输入完成
while ((str[i] = getchar()) != '\n') {
i++;
}
str[i] = '\0'; //后续进行转换时以此为结束标志
printf("请输入偏移值: ");
scanf("%d", &offset);
//偏移值大于26就取余
if (offset > M) offset = offset % M;
for (i = 0; str[i] != '\0'; i++) {
if (str[i] >= 'A' && str[i] <= 'Z') {
if (str[i] + offset <= 'Z') {
str[i] = str[i] + offset;
}
else str[i] = str[i] - (M - offset);
}
else if (str[i] >= 'a' && str[i] <= 'z') {
if (str[i] + offset <= 'z') {
str[i] = str[i] + offset;
}
else str[i] = str[i] - (M - offset);
}
}
for (i = 0; str[i] != '\0'; i++) {
printf("%c", str[i]);
//printf("%s", str[i]);
//putchar(str[i]);
}
return 0;
}
出现的问题:
最后的输出部分刚开始用的:
printf("%s", str[i]);
发现没有输出结果,因为%s输出的是字符串,而不是单个字符输出,字符串的输出需要'\0'。
还尝试不让str[i]='\0',后续循环判断的条件使用str[i]!='\n',程序可以正常执行,但是不推荐这样做,很多资料都说这样不安全。
此外还可以定义一个k,用for(k=0;k<i;k++)作为循环判断。
其他:
'\0'表示空操作,无法输入,所以输入字符串时设定一个输入结束符,即'\n',出现该字符表示输入结束,并将该结束符转换为字符结束符'\0'。
标签:printf,输出,加密,结束符,偏移,str,offset,凯撒,输入 From: https://blog.csdn.net/weixin_69332208/article/details/141039859