c++程序问题,为什么用gets()输入不了字符,程序无错,把pluskey

#include <iostream>
#include <cstring>
using namespace std;/*输入字符位数*/
const int num=50;
int encryption();
int decryption();
int main()/*选择设置密码或消除密码*/
{
cout<<"choose to encryption(input a) or decryption(input anykey except a)"<<endl;/*选择设置密码或消除密码,a代表设置密码,0代表消除密码*/
if(getchar()=='a') encryption();
else decryption();
return 0;
}
int encryption()/*设置密码函数*/
{
cout<<"now doing encryption"<<endl;
char a[num],b[7]={'4','9','6','2','8','7','3'};
gets(a);
int i=strlen(a),j,k;
for(j=0;j<i;j++)
{
k=a[j]+b[(j+1)%7-1];
if(k>122) a[j]=k-91;
else a[j]+=b[(j+1)%7-1];
}
cout<<a<<endl;
system("pause");
return 0;
}
int decryption()/*取消密码函数*/
{
cout<<"now doing decryption"<<endl;
char a[num],b[7]={'4','9','6','2','8','7','3'};
cin>>a;
int i=strlen(a),j;
for(j=0;j<i;j++)
{
a[j]-=b[(j+1)%7-1];
if(a[j]<32) a[j]+=91;
}
cout<<a<<endl;
system("pause");
return 0;
}
上面的加密函数用了gets来输入,不行,而改用cin就可以,例如下面的解密函数,把加密函数单独做成一个程序也可以运行(用gets)为什么呢

因为gets()函数接收到了回车符
在主函数中执行到if(getchar()=='a') 时,接收输入,此时我们会输入字符并按回车,我们输入的第一个字符被getchar()函数接收,而第二个之后的字符仍然在输入字符流中,所以当使用gets()时,就接收到了输入流中的字符串,之所以不能接收输入,是因为我们先输入了一个字符a和回车,这样gets()函数接收到了回车符,所以不需要再输入了,为了接收用户自己的输入,可以使用fflush()函数清除输入流,主函数改为:
int main()/*选择设置密码或消除密码*/
{
cout<<"choose to encryption(input a) or decryption(input anykey except a)"<<endl;/*选择设置密码或消除密码,a代表设置密码,0代表消除密码*/
if(getchar()=='a')
{
fflush(stdin);
encryption();
}
else decryption();
return 0;
}就可以了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-29
楼上正解。

if(getchar()=='a') encryption();

你在这里会输入一个a+一个换行。

所以每次a这个字符串读到的都是一个空串。
正确的做法是在
gets(a);之前加一行

gets(a); 或者 get(a[0]);都可以
第2个回答  2012-09-29
跟gets没关系,是getchar(),它只接收了字符'a',后面的回车没有接收。
相似回答