请高手帮我看一下这个C++程序哪里出错

我想做的是输入一行文字,可以选择两种输出,一种是将字母变成下一个字母,a变成b,z变成a这样,一种是按原文字输出,我想用#define来控制
#include <iostream>
using namespace std;
#define CHANGE 1
int main()
{char c;
cout<<"input a text:"<<endl;
#if CHANGE
while((c=getchar())!='\n')
{if(c>='a'&&c<'z'||c>='A'&&c<'Z')
{c=c+1;
if(c=='z'||c=='Z')
c=c-25;}
cout<<c;
}
#else
while((c=getchar())!='\n')
putchar(c);
#endif
cout<<endl;
return 0;
}
我输入lazy时输出却是mbza,
我把while循环里去掉一个括号,变成这样
while((c=getchar())!='\n')
{if(c>='a'&&c<'z'||c>='A'&&c<'Z')
c=c+1;
if(c=='z'||c=='Z')
c=c-25;
cout<<c;
}
再输入lazy时却输出mbaa,不明白是怎么回事,改一个括号怎么变化那么多,可还是错的,麻烦高手解答一下。

没改的时候第二个if在第一个if的执行语句里面,改了就出来了,成了并列的,当然会错
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-05-31
但是看不明白 函数f(),返回为void,不能做+或=运算。 欢迎采纳我的答案修改三处 1 void f(int); - int f(int); 2 void f(int n)c
第2个回答  2012-05-31
#include <iostream>

using namespace std;

#define CHANGE 1

int main()
{
char c;
cout << "input a text:" << endl;
#if CHANGE
while ( ( c = getchar() ) != '\n' )
{
if ( ( c >= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z' ) )
{
if ( c != 'z' && c != 'Z' )
{
c = c + 1;
}
else
{
c = c - 25;
}
}
cout << c;
}
#else
while ( (c = getchar() ) != '\n' )
{
putchar( c );
}
#endif
cout << endl;

}
第3个回答  推荐于2016-06-21
修改后:

#include <iostream>
using namespace std;
#define CHANGE 1
int main()
{
char c;
cout<<"input a text:"<<endl;
#if CHANGE
while((c=getchar())!='\n')
{
if(c>='a'&&c<'z'||c>='A'&&c<'Z')
{
c=c+1;
}
else if(c=='z'||c=='Z')
{
c=c-25;
}
cout<<c;
}
#else
while((c=getchar())!='\n')
putchar(c);
#endif
cout<<endl;
return 0;
}追问

有个小问题
if(c>='a'&&c='A'&&c<'Z')
{
c=c+1;
}
else if(c=='z'||c=='Z')
{
c=c-25;
}
把这部分里面的括号都去掉行吗?

追答

可以,最好加上。
这样查看代码很方便,同时以后要修改代码的话,也不至于出错。

本回答被提问者采纳

高手们,帮忙看下这个C++程序的错误在哪里? 我想找出矩阵中最大的数...
以下是我给你修改后的程序:(只是一个小错误,传参问题哈)自己看吧,能写出来就能看得懂,这肯定没问题 include<iostream> include<iomanip> include<cmath> include<string> using namespace std;int m,n,k,p,q;void hey(int c[4][4],int *a,int *b);int main(){int c[4][4],i,j;...

求高手帮忙看看这个C++求和公式哪里出错了??
char* argv[]。如果你要定义这个。在开头加#include"string.h". 就算你这样还是会出错的。你的定义出错了你的原句int void main(int argc, char* argv[])这里不能在之前定义int。要不然字符串转换不过来,会出错的。你可以改成这个void main(int argc,char* argv[]).你先试下 ...

哪位高手帮我看下这个C++程序哪里出错了,是重载运算符的
s4=s1^s2; \/\/“s1^s2”处,将调用“operator ^”函数 cout<<"s1^s2=";\/\/多了一个<符号,且这个值是一个距离,不需要用坐标表示,LZ改改吧,如果还需要什么可以联系我 s4.display();system( "pause" );\/\/系统暂停 return 0;\/\/ } ...

求高手帮忙解决下面这个C++中的一个题目。看俺的代码哪里有错...
你有几个地方有错误:1.求个位数,直接用n%10就可以了,你那样子是求的最高位的值 2.既然你已经定了个位为7,直接给m赋7就可以了吧。3.你上面那样子算的时候,最后退出第一个while循环的时候,n是为0的,下面不能用这个n计算,你若是不断的用n\/=10,开始应该用个变量保存这个n的值 4.还...

请C++高手来看看我的这串代码哪里出错了
\/\/[第一个错误]error: reference to 'string' is ambiguous\/\/我不知道我的理解有没有错啊,你的自己定义的类string和std namespace里面的string同名了。 \/\/希望帮到你!\/\/***\/\/ 望采纳!o(∩_∩)o \/\/*** 你是不是夜里刷题的啊!兄台~

C++程序问题,哪位高手帮帮忙看下。有一个错误invalid conversion from...
s=(struct node*)malloc(sizeof(bitree));改了以后的程序:include "stdio.h"include "stdlib.h"define null 0 define M 20 define MaxSize 20 typedef struct node {char data;int ltag,rtag;struct node *left,*right;}bitree;bitree *Q[M];bitree *pre=0;bitree *creatree(){char x...

初学C++请高手帮我看看这段代码有什么错误!程序目的是要求运行时从键盘...
1.class Time{ void set_time (void);void show_time(void);这两个函数根本没有定义 2.int set_time(void){ cin>>t.hour;cin>>t.minute;cin>>t.sec;} int show_time(void){ cout<<t,hour<<":"<<t.minute<<":"<<t.sec<<endl;} 这两个函数怎么能去访问别人的私有成员?建议...

来我帮看看这个C++的程序!!!
cout<<str<<"\\t";输出这个字符串,并加上水平制表符 delete str;释放前面申请的内存空间 } cout<<endl;输出换行符号,并刷新输出流 } for(i=0;i<3;i++) 删除前面申请的内存 delete b[i]; 这里有错误,正确的是delete [] b[i];delete b;删除指针数组,同样错误,正确的是delete []b;}...

C++ 高手帮帮忙啊 这程序咋也无法运行!!!
这里很有问题。第一 a没有初始化,如果a里面的值恰好为#,那你的程序就挂了。没有初始化的变量,是有一个随机值的。第二,假设只输入#,那么r->data == '#' r=r->next; r->next又是无定义的。它指哪里都不知道。。这个里面你的循环结束了,你有一个输出,cout<<r->data<<r->next-...

请高手看一下我的这个c++程序错在哪!!
friend Comeplex operator +(Comeplex &,int &);friend Comeplex operator +(int &,Comeplex &);const int &或者直接int就可以了(还有一个不好的办法,不改前面那就只能用变量去代替main函数里面的字面值常量1和5)

相似回答