C程序怎么补按照我想的运行啊。。

来源:百度知道 编辑:UC知道 时间:2024/06/23 18:35:42
程序如下。。#include<stdio.h>
char f(char a[])
{
int k;
a[k]=a[k]+1;
k++;
return a[k];
}
char g(char a[255])
{
int k;
a[k]=a[k]-1;
k++;
return a[k];
}
void main()
{
int i;
char str[255],e;
printf("请选择你所要输入的是明文海是密码。A:明文。B:密码。");
scanf("%c",&e);
if(e=='A')
{
printf("请输入你的明文\n");
gets(str);
}
else
{
printf("请输入你的密码");
gets(str);
}
for(i=0;str[i]!='\0';i++)
if(e=='A')
{

str[i]=f(str);
while(str[i]!='\0')
{
printf("你的密码为%c",str[i]);
i++;
}
}
else
{
str[i]=g(str);
while(str[i]!='\0')
{
printf("你的明文为%c",str[i]);
i++;
}
}

}

他执行了if语

原因是gets函数判断输入结束的标志是看有没有输入回车,第一次调用scanf函数的时候,你输入的其实是2个字符,一个保存在变量e里,一个是你敲的回车符,还在键盘缓冲区,当调用gets函数的时候,先读取缓冲区的数据,错把第一次输入的回车符当作当作所需数据,其实输入早就结束
然后在for语句里面,由于str串里面还没有保存字符串,条件str[i]!='\0'永远不满足,所以for循环不启动
建议将gets(str)换为scanf("%s",str)
或者增加一个savbuf[10],执行完scanf("%c",&e)语句后马上执行gets(savbuf)

另外,程序开头的两个函数有问题,我调试出来了,主函数里的if语句也用switch语句替换了,下面是我调试好的源代码

#include<stdio.h>
#include<string.h>
char f(char a[])
{
static int k=0;
a[k]=a[k]+1;
k++;
return a[k-1];
}
char g(char a[])
{
static int k=0;
a[k]=a[k]-1;
k++;
return a[k-1];
}
void main()
{
int i;
char str[255],e;/* savbuf[10];*/
printf("请选择你所要输入的是明文还是密码,A:明文,B:密码:");
scanf("%c",&e);
/* gets(savbuf);*/
switch(e)
{
case 'A':
case 'a': printf("请输入你的明文:");
scanf("%s"