注册 登录
编程论坛 C语言论坛

译密码问题 为什么运行不出来

美美学c 发布于 2023-09-29 20:19, 791 次点击
#include <stdio.h>
#define M 10
int main() {
    int i,n,a[M];
char b;
scanf("%d",&i);
for(n=0;n<i;n++)
{scanf("%c",b);
a[n]=b;
}
for(n=0;n<i;n++)
{if((a[n]>=87&&a[n]<=90)||(a[n]>=119&&a[n]<=122))
a[n]=a[n]-22;
else if((a[n]>=65&&a[n]<87)||(a[n]>=97&&a[n]<122))
a[n]=a[n]+4;
else a[n]=a[n];
}
for(n=0;n<i;n++)
{printf('%c',a[n]);}
return 0;
}
 
6 回复
#2
邹生笑谈2023-09-29 21:01
运行了一下,提示的错误是最后一个输出有问题。应该是printf("%d",a[n]);

错误点:单引号错了,应该是双引号。

至于里面的参数是%c还是%d,那就看你想干什么了。
#3
美美学c2023-09-30 19:59
回复 2楼 邹生笑谈
大佬 改了那个错误 还是运行不出来 题目要求是将China!译为Glmre!
#4
美美学c2023-09-30 20:26
回复 楼主 美美学c
这个程序目前发现如下问题
1.scanf加循环,永无止境。且scanf循环格式错误应为&b
2.定义的数组应为char型
3.由于输入的是字符应与字符比较而非ascii值
4.字符串的输入输出应使用gets()和puts()
请大佬指教

#5
邹生笑谈2023-10-01 14:44
回复 3楼 美美学c
好吧,我运行了还没测试。你还有错误:
第二个输入,你格式不对,scanf("%c",b);应该是scanf("%c",&b);(明明第一个你记得加&了)
另外,scanf的输入是有缓存的,之后再用scanf缓存也会读进去。
例如   你的scanf("%c",&b);//输入字符到b(空格回车制表符也算)
因此测试输入是:
1.输入5china
2.按回车
3.显示

效果为
5china
glmre请按任意键继续. . .
#6
邹生笑谈2023-10-01 15:07
回复 4楼 美美学c
原来的没这么多问题啊,原来的代码你只需要改我说的那两个地方,基本可以达到核心目的了。
你原来的思路不就是把输入的字符专为ASCII码,再进行密码操作,再次输出吗。
最后你用单引号,是打算一个一个输出,但是单引号表示一个字符,这是输入字符的putchar()的。printf里面是【格式控制字符串】,是用双引号的,表示一个字符串。所以用双引号格式才对。

==========================================
我看了教材上有一句话:

与只能输出字符的putchar()相比,printf既能以字符格式输出也能以十进制整型格式输出char变量的值,以十进制输入的是char变量的ASCII码的值。
因此我想反过来以整型输出字符串也可以。我上网看到关于printf的一句话:char 和int 型可以任意被 %c 和 %d 解释,解释结果对应各自的ASCII码 和 char 数据,但是在使用时要小心,别出错。

至于你的2.3.问题,我觉得可以这样改
你的4,这函数我不了解,你自己查查。scanf也可以输出字符串,但是格式要求严格。
#7
美美学c2023-10-01 20:11
回复 6楼 邹生笑谈
好的 感谢大佬
1