因为你的x大于w,根据你的条件:if(c>='w'&&c<='z') c=c-54;}这个意思是往前移动54位,小写转一圈后,是52位,然后再往后移动2位,刚好是大写的B所以,运行c=c-54,y也是一样,你输入大写的X,就会输出大写的I,不信试试。条件判断嘛,这个很简单的,努力点吧,想四个月之前我开始学的时候都没有你这么菜也,哈哈,不过现在我已经在写API了,正学习MFC中,O(∩_∩)O哈哈~,你要加油哦。。
你这个程序的问题处在if语句上了,你说的s t u v有问题S T U V也有问题啊说不定还有其它字母也有问题.
你看你的程序结构如果键盘输入stuv或S T U V 程序会进入第一个if语句接着会进入第二个if语句做c = c+4;当第二个if语句结束后会进行第三个if语句的判断此时c还是会满足第三个if语句的条件的,进去会做里面的事,接下来要是第四个if语句的判断了.是不是与你期待的值改变了.
你可以在后三个if语句内加上continue就ok.
这个问题很简单,可以这样做:
#include
using namespace std;
int main()
{char c;
int i;
while(cin>>c)
{i=0;
if(c>='a'&&c<='z')i=1;
if(c>='A'&&c<='Z')i=2;
if(i!=0)c+=4;
if(i==1&&c>'z')c-=26;
if(i==2&&c>'Z')c-=26;
cout<
return 0;
}
原来的程序:
#include
using namespace std;
int main()
{char c;
while((c=getchar())!='\n')
{if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
{if(c>='A'&&c<='V'||c>='a'&&c<='v') c=c+4; //若果c=“s,t,u,v,S,T,U,V”,这里会变成c=“w,x,y,z,W,X,Y,Z”
if(c>='W'&&c<='Z') c=c+36; //然后这里c满足条件,会执行(而且本身也不对,应该-22)
if(c>='w'&&c<='z') c=c-54;} //同上
cout<
cout<
}
改正后的代码:
#include
using namespace std;
int main()
{char c;
while((c=getchar())!='\n')
{if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
{if(c>='A'&&c<='V'||c>='a'&&c<='v') c=c+4;
else if(c>='W'&&c<='Z') c=c-22; //这里原来的“if”改成“else if”
else if(c>='w'&&c<='z') c=c-22;} //同上
cout<
cout<
}
#include
using namespace std;
int main()
{char c;
while((c=getchar())!='\n')
{ if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
{if(c>='A'&&c<='V'||c>='a'&&c<='v') c=c+4;
else if(c>='W'&&c<='Z') c=c-22; //注意对照ASCII表
else if(c>='w'&&c<='z') c=c-22;
}
cout<
cout<
}
祝你成功