C语言问题:老师说数组不支持整体输入和输出,那么这段代码为什么可以?(格式控制符为%s)

#include "stdio.h"
void main()
{
int j,n;
char ch[80],tran[80];
printf("input cipher code:");
gets(ch);
printf("\ncipher code:%s",ch);
j=0;
while (ch[j]!='0')
{if((ch[j]>='A') && (ch[j]<='Z'))
tran[j]=155-ch[j];
else if ((ch[j]>='a') && (ch[j]<='z'))
tran[j]=219-ch[j];
else
tran[j]=ch[j];
j++;
}
n=j;
printf("\noringinal text:");
for(j=0;j<n;j++)
putchar(tran[j]);
printf("\n");

}

以及,为什么输出结果除了我要的,还有乱码?
第10行写错了,应该是while (ch[j]!='\0') 啊,嘻嘻

字符型数组是C中唯一可以直接整体输出的数组类型,这里必须要用到%s控制符。用%s输出字符数组需要用'\0'字符标记字符串的结尾,不然会一直输出下去,包括数组之外的部分,那些就是乱码。追问

\0 啊,我知道啊,然后呢,怎么修改可以去掉那些乱码?(乱码的情况见问题补充吧)

追答

你的循环的判断条件是错的。:ch[j]!='0'代表当字符为'0'的时候停下来,和'\0'是两码事,那么你的循环就不会再字符串的结尾停下来,也就是说n的值远远超过了你所输入的字符串的长度,输出的时候当然会把内存里其他的东西也输出来,那就是乱码。

追问

嗯,我也注意到了,新手新手,嘻嘻

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-13
大致看了下 这个并没有你说的整体输入和输出 gets(ch)你输入了一段字符串并传给了给数组ch,每个字符都是一个数组元素,你输入了10个字符那么就是ch[0]---ch[9],输出的时候putchar也是在一个循环体内 是逐个输出的。 至于乱码的话 2种情况 要么你的while循环内部对字符的转换除了问题 要么是软件本身和系统的兼容性问题 我也遇到过乱码 但是在另一台电脑上就不是乱码。你仔细检查一下while内部的字符转换处理过程 我也没心情去仔细看追问

第10行写错了,应该是while (ch[j]!='\0') 嘛~

第2个回答  2012-11-13
这个是字符数组,一般都叫 字符串。

整形数组只是整形的集合,所以其数组名仅仅是其首地址,我们必须要用for循环才能完整的输出整个整形数组

出现乱码是因为,字符串都有一个 结束符‘/0’,因为输出时找不到结束符,所以以乱码输出。追问

嗯嗯,第10行写错了,应该是while (ch[j]!='\0') 啊,嘻嘻

追答

那解决了问题么?
懂了就好

第3个回答  2012-11-13
你好。这个程序是一个简单的凯撒加密算法,将由A-Z和a-z组成的原文ch字符数组,转成另一组ASCII码字符tran数组,新的字符tran数组由于是密文,所以输出来的字符成了乱码。乱码是正常的,你看的懂话那就不叫加密了。追问

第10行写错了,应该是while (ch[j]!='\0') 啊,嘻嘻

第4个回答  2012-11-13
你输入的是字符串呀

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网