关于字符和字符串
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
char zh;
do
{
printf("请输入要转换的内容:");
scanf("%c",&zh);
if((zh>='a'&&zh<='z')||zh>='A'&&zh<='Z')
{
zh=zh+5;
if(zh>'Z'&&zh<'a'||zh>'z')
{
zh=zh-26;
printf("%c",zh);
}
else printf("%c",zh);
}
else printf("%c",zh);
}
while(zh!=0);
return 0;
}
在这个程序,我希望输出的是比本上往后5的英语字母..
但是这里发生了一个不解的事情. %c 不是字符型吗.为什么我一次可以输入多个字符呢?
如果我输入aa 在内存里,他们应该是分开储存的,zh是个字符型,应该占一个字节,8位...
现在变成了16位吗? 还是在8位里存放了a+a呢?
为什么计算机知道我输入的是两个字母,而且还能两个分别处理呢... 好茫然啊.
请大家帮帮忙.. 头都晕了...
[解决办法]
你输入的存入了一个 stadin的缓冲里面,scanf(..%c)只是以字符型读取首个字符。
[解决办法]
%c是字符型,scanf("%c",&zh);的意思是从输入缓冲区中区一个字符,与你输入什么内容无关,你输入符合"%c"格式的他就取出,没有他就取不到,这一点你要清楚。
你输入aa后,输入缓冲区中有aa和回车(你输入完之后确认用的回车也会进入缓冲区),然后字符a会被取走,剩下a和回车,因为while循环的缘故,只要满足循环条件会进入下一次循环,因为缓冲区还有内容,所以不等你输入scanf("%c",&zh)又执行了2轮。
scanf("%c",&zh)不可能一次读2个char。
增加一个计数器,可以看出循环的次数
int cnt=0;
do
{
printf("请输入要转换的内容:");
scanf("%c",&zh);
cnt++;
printf("cnt=%d",cnt);
.....
[解决办法]
建议下次再贴代码用上面的插入源代码插件否则代码太乱了