C语言 简单编码 (如果访问到字符A,W,F就转化成I)

题目是:最近Kingly对编码很感兴趣,于是从网上找了一些编码原则来对字符串做实验。由于Kingly一直很忙,所以希望你这位编程高手来替他解决这个问题。下面是编码原则:(... 题目是:
最近Kingly对编码很感兴趣,于是从网上找了一些编码原则来对字符串做实验。由于Kingly一直很忙,所以希望你这位编程高手来替他解决这个问题。下面是编码原则:(1) 如果访问到字符A,W,F就转化成I;(2) 如果访问到字符C,M,S就分别转化成L,o,v;(3) 如果访问到字符D,P,G,B就转化成e;(4) 如果访问到字符L,X就分别转化成Y,u;(5) 其他字符均保持不变。(6) 遇到END就结束!

Sample Input:
A
CMSD
LMX
END
Sample Output:
I
Love
You

我的程序是:

#include <stdio.h>
#include <string.h>
int main()
{
int i=0,n=1;
char a[100];
while(n)
{
while(a[i]=getchar()!='\n')
i++;
if(a[0]!='E' || a[1]!='N' || a[2]!='D')
{
for(n=0;n<=i;n++)
{
switch(a[n])
{
case 'A':case 'W':case 'F': a[n]='I'; break;
case 'C': a[n]='L'; break;
case 'M': a[n]='o'; break;
case 'S': a[n]='v'; break;
case 'D':case 'P':case 'G':case 'B': a[n]='e'; break;
case 'L': a[n]='Y'; break;
case 'X': a[n]='u'; break;
}
}
for(n=0;n<=i;n++)
printf("%c",a[n]);
printf("\n");
i=0;
}
else
n=0;
}
return 0;
}

为什么输什么出来的都是笑脸额。。
请看看哪里错了
展开
 我来答
tycable
推荐于2018-04-07 · TA获得超过256个赞
知道答主
回答量:64
采纳率:0%
帮助的人:65.5万
展开全部
有注释:

#include <stdio.h>
#include <string.h>
int main()
{
int i=0,n=1;
char a[100];
while(n)
{
while((a[i]=getchar())!='\n') /* 加上括号 */
i++;
if(a[0]!='E' || a[1]!='N' || a[2]!='D')
{
for(n=0;n<=i;n++)
{
switch(a[n])
{
case 'A':case 'W':case 'F': a[n]='I'; break;
case 'C': a[n]='L'; break;
case 'M': a[n]='o'; break;
case 'S': a[n]='v'; break;
case 'D':case 'P':case 'G':case 'B': a[n]='e'; break;
case 'L': a[n]='Y'; break;
case 'X': a[n]='u'; break;
}
}
for(n=0;n<=i;n++)
printf("%c",a[n]);
/*printf("\n");*/
i=0;
}
else
n=0;
}
return 0;
}

如果考虑,ENDXXX 的问题,可以这样
把那个 if() 换成下面的:
if(strlen(a) == 3 && a[0] == 'E' && a[1] == 'N' && a[2] == 'D')
break;
else
更多追问追答
追问
输入END之后没有结束。。为什么
追答
因为 getchar 把 换行 读进来了,
可以在 while 前加上,然后换掉 while
char ch;
while((ch=getchar())!='\n'){
a[i] = ch;
i++;
}
前端小茶馆
2011-03-22 · TA获得超过962个赞
知道小有建树答主
回答量:329
采纳率:0%
帮助的人:339万
展开全部
我不是很清楚为什么那样该,但是改了之后对了。
把 while(a[i]=getchar()!='\n')
改成:
while( (a[i]=getchar())!= '\n')

而且你的结束输入语句也是错的,假如我输入了 ENDBGDERHJ
该不该结束呢?

建议你使用scanf 或者 gets 输入语句 ,然后使用strlen 计算输入字符串的长度 。而且用这两个输入函数也不会出现 我刚才的疑问了。
追问
输入END之后没有结束。。为什么
追答
你看我的输入,已经结束输入了。
当然了,你可以用这样的判断语句:
if (strcmp(a,"END")==0) break;
就不用那么麻烦了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
PolarisWatcher
2011-03-22 · TA获得超过1331个赞
知道小有建树答主
回答量:615
采纳率:0%
帮助的人:598万
展开全部
while(a[i]=getchar()!='\n')
赋值的顺序从右到左。。如果(a[i]=getchar())不加括号,就是“getchar()不是回车”为真,a[i]=1。ASCII对应soh,所以你看到了笑脸。
如果学过字符串,那就用String,用来判断end比较有效
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
活泼火箭炮
2011-03-22 · 超过11用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:30.6万
展开全部
如果用scanf 可以写两遍,,第一个读换行,,第二个读 END
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式