凯撒密码加密(向后偏移)

#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'。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值