要求:用户输入一行明文(字符串),针对字母进行加密(偏移量设置为 3),非字母...
#include <stdio.h>//感觉逻辑是没有什么问题,但是输出结果为方框;int main() {
int ch;
printf("请输入明文:");
while ((ch = getchar()) != '\n') {
if (ch >= 'A' && ch <= 'Z') {
if (ch = ch + 3 > 'Z' && ch + 3 <= 'a') {
ch = ch - 'Z' + 'A';
putchar(ch);
} else {
ch = ch + 3;
putchar(ch);
}
} else if (ch >= 'a' && ch <= 'z') {
if (ch = ch + 3 > 'z') {
ch = ch - 'z' + 'a';
putchar(ch);
} else {
ch = ch + 3;
putchar(ch);
}
} else {
putchar(ch);
}
}
return 0;
} #include <stdio.h>
int main() {
int ch;
printf("请输入明文:");
while ((ch = getchar()) != '\n') {
if (ch >= 'a' && ch <= 'z'-3)
{
ch = ch + 3;
} else if (ch >= 'A' && ch <= 'Z'-3)
{
ch = ch + 3;
} else if (ch > 'Z'-3 && ch <= 'Z')
{
ch = 'A' + 3 - ('Z' - ch) - 1;
} else if (ch > 'z'-3 && ch <= 'z')
{
ch = 'a' + 3 - ('z' - ch) - 1;
}
putchar(ch);
}
return 0;
} 临时号 发表于 2022-9-6 00:01
我的写的是有啥问题嘛;我感觉逻辑是对的;但是实际结果不对 本帖最后由 临时号 于 2022-9-6 00:17 编辑
阿亮不减肥 发表于 2022-9-6 00:14
我的写的是有啥问题嘛;我感觉逻辑是对的;但是实际结果不对
可以说问题还是很大的 临时号 发表于 2022-9-6 00:16
可以说问题还是很大的
#include <stdio.h>// if里面是不是不能再用if了
int main() {
int ch;
printf("请输入明文:");
while ((ch = getchar()) != '\n') {
if (ch >= 'A' && ch <= 'Z') {
if (ch > 'Z' - 3 ) {
ch = ch - 'Z' + 'A' + 3;
} else {
ch = ch + 3;
}
} else if (ch >= 'a' && ch <= 'z') {
if (ch >= 'z' - 3) {
ch = ch - 'z' + 'a' + 3;
putchar(ch);
} else {
ch = ch + 3;
putchar(ch);
}
} else {
putchar(ch);
}
}
// while ((ch = getchar()) != '\n') {
// putchar(ch);
return 0;
} 阿亮不减肥 发表于 2022-9-6 00:21
#include // if里面是不是不能再用if了
int main() {
改完了
#include <stdio.h>//感觉逻辑是没有什么问题,但是输出结果为方框;
int main() {
int ch;
printf("请输入明文:");
while ((ch = getchar()) != '\n') {
if (ch >= 'A' && ch <= 'Z') {
if (ch + 3 > 'Z' && ch + 3 <= 'a') {
ch = ch + 3 - 'Z' + 'A' - 1;
putchar(ch);
} else {
ch = ch + 3;
putchar(ch);
}
} else if (ch >= 'a' && ch <= 'z') {
if (ch + 3 > 'z') {
ch = ch + 3 - 'z' + 'a' - 1;
putchar(ch);
} else {
ch = ch + 3;
putchar(ch);
}
} else {
putchar(ch);
}
}
return 0;
} 本帖最后由 额外减小 于 2022-9-6 00:30 编辑
知道了
你没有考虑运算符的优先级
赋值号的优先级应该是要小于“小于号”的
所以就着你的代码改成这样#include <stdio.h>
int main()
{
int ch;
printf("请输入明文:");
while ((ch = getchar()) != '\n') {
if (ch >= 'A' && ch <= 'Z') {
if ((ch = ch + 3 )> 'Z') {//原本这行你有个笔误,我帮你删掉了
ch = ch - 'Z' + 'A';
putchar(ch);
} else {
//去掉这行 (重复加了2个3) ch = ch + 3;
putchar(ch);
}
} else if (ch >= 'a' && ch <= 'z') {
if ((ch = ch + 3 )> 'z') {
ch = ch - 'z' + 'a';
putchar(ch);
} else {
// 这行去掉 ch = ch + 3;
putchar(ch);
}
} else {
putchar(ch);
}
}
return 0;
}(只是微调了几个地方)
我可能要去睡觉了,以后可能没法回复 临时号 发表于 2022-9-6 00:25
改完了
谢谢,大佬,明白哪里错误了! 额外减小 发表于 2022-9-6 00:26
知道了
你没有考虑运算符的优先级
赋值号的优先级应该是要小于“小于号”的
谢谢大佬,明白哪里错了,主要是优先级哪里有问题,已解决;{:9_228:} 本帖最后由 jackz007 于 2022-9-6 10:44 编辑
凯撒密码而已,算法很简单
#include <stdio.h>
char crypt(char ch , int e)
{
char b ;
if(ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z') {
b = (ch >= 'a' && ch <= 'z') ? 'a' : 'A' ;
ch = b + (26 + ch - b + e) % 26 ;
}
return ch ;
}
int main(void)
{
char ch ;
int e = 3 ;
printf("请输入明文:") ;
while ((ch = getchar()) != '\n') putchar(crypt(ch , e));
printf("\n") ;
printf("请输入密文:") ;
while ((ch = getchar()) != '\n') putchar(crypt(ch , -e)) ;
printf("\n") ;
}
编译、运行实况:
D:\\C>g++ -o x x.c
D:\\C>x
请输入明文:Hello,World!
Khoor,Zruog!
请输入密文:Khoor,Zruog!
Hello,World!
D:\\C> jackz007 发表于 2022-9-6 10:41
凯撒密码而已,算法很简单
编译、运行实况:
666
页:
[1]