
为什么我的C语言程序会跳过一条输入语句呢??
#include"stdio.h"#include"string.h"intk=0;//全局变量控制通讯录的长度structTXL{charname[10];//姓名ch...
#include"stdio.h"
#include"string.h"
int k=0;//全局变量 控制通讯录的长度
struct TXL
{char name[10];//姓名
char address[20]; //家庭住址
char num[10];//学号
char tpnum[11];//telephone number电话号码
}CL[36]; //材料学院08050302班共31人
void ShuChu()//输出通讯录函数
{int i;
printf("通讯录如下:\n");
for(i=0;i<k;i++)
printf("\t姓名 %s\t地址 %s\t学号 %s\t电话 %s\n",CL[i].name,CL[i].address,CL[i].num,CL[i].tpnum);
}
void ZJ() //增加人物的函数
{printf("输入姓名:\n");
scanf("%s",CL[k].name);
printf("输入地址:\n");
scanf("%s",CL[k].address);
printf("输入学号:\n");
scanf("%s",CL[k].num);
printf("输入电话号码:\n");
scanf("%s",CL[k].tpnum);
k++;//增一人长度加一
ShuChu();
}
void XG() //修改人物的函数
{
char X[10];//储存待修改人物的姓名
int j;
printf("输入要修改人物的姓名:\n");
scanf("%s",X);
for(j=0;j<k;j++)
{if(strcmp(CL[j].name,X)==0)//查找此人物
{printf("输入修改的地址:\n");
scanf("%s",CL[j].address);
printf("输入修改的学号:\n");
scanf("%s",CL[j].num);
printf("输入修改电话号码:\n");
scanf("%s",CL[j].tpnum);
}
}
ShuChu();
}
void SC() //删除人物的函数
{
char X[10];//存储待删除人物的姓名
int j,l=0;// l:如果存在这个人物l为1否则为0
printf("输入要删除人物的姓名:\n");
scanf("%s",X);
for(j=0;j<k;j++)
{if(strcmp(CL[j].name,X)==0)
{for(;j<k-1;j++)
{CL[j]=CL[j+1];}
k--;l=1; //删除人物通讯录减一
break;
}
}
if(l)printf("要删除的人物已删除:\n");//存在要删除的人物
else printf("要删除的人物不存在:\n");//不存在要删除的人物
ShuChu();
}
void CX() //查询人物的函数
{char a,XX[20];
int j;
printf("以姓名查询输入x\n以电话查询输入t\n以地址查询输入d\n以学号查询输入n:\n");
a=getchar();#为什么这个语句执行不了
if(a=='x'){printf("输入查询人物的姓名:\n");gets(XX);
for(j=0;j<k;j++)
{if(strcmp(CL[j].name,XX)==0)
printf("\t姓名 %s\t地址 %s\t学号 %s\t电话 %s",CL[j].name,CL[j].address,CL[j].num,CL[j].tpnum);}}
else if(a=='t'){printf("输入查询人物的电话:\n");gets(XX);
for(j=0;j<k;j++)
{if(strcmp(CL[j].tpnum,XX)==0)
printf("\t姓名 %s\t地址 %s\t学号 %s\t电话 %s",CL[j].name,CL[j].address,CL[j].num,CL[j].tpnum);}}
else if(a=='d'){printf("输入查询人物的地址:\n");gets(XX);
for(j=0;j<k;j++)
{if(strcmp(CL[j].address,XX)==0)
printf("\t姓名 %s\t地址 %s\t学号 %s\t电话 %s",CL[j].name,CL[j].address,CL[j].num,CL[j].tpnum);}}
else if(a=='n'){printf("输入查询人物的学号:\n");gets(XX);
for(j=0;j<k;j++)
{if(strcmp(CL[j].num,XX)==0)
printf("\t姓名 %s\t地址 %s\t学号 %s\t电话 %s",CL[j].name,CL[j].address,CL[j].num,CL[j].tpnum);}}
else printf("输入有误.重来\n");
}
void main()
{char b;
int i=1;
do{
printf("增加人物输入'z':\n");
printf("修改人物输入'x':\n");
printf("删除人物输入's':\n");
printf("查询人物输入'c':\n");
printf("停止输入则输入'j':\n");
b=getchar();#这个语句到了第二次才能执行执行为什么呢
if(b=='z')ZJ();
else if(b=='x')XG();
else if(b=='s')SC();
else if(b=='c')CX();
else if(b=='j')i=0;
else printf("Error Input!\n");
}while(i);
} 展开
#include"string.h"
int k=0;//全局变量 控制通讯录的长度
struct TXL
{char name[10];//姓名
char address[20]; //家庭住址
char num[10];//学号
char tpnum[11];//telephone number电话号码
}CL[36]; //材料学院08050302班共31人
void ShuChu()//输出通讯录函数
{int i;
printf("通讯录如下:\n");
for(i=0;i<k;i++)
printf("\t姓名 %s\t地址 %s\t学号 %s\t电话 %s\n",CL[i].name,CL[i].address,CL[i].num,CL[i].tpnum);
}
void ZJ() //增加人物的函数
{printf("输入姓名:\n");
scanf("%s",CL[k].name);
printf("输入地址:\n");
scanf("%s",CL[k].address);
printf("输入学号:\n");
scanf("%s",CL[k].num);
printf("输入电话号码:\n");
scanf("%s",CL[k].tpnum);
k++;//增一人长度加一
ShuChu();
}
void XG() //修改人物的函数
{
char X[10];//储存待修改人物的姓名
int j;
printf("输入要修改人物的姓名:\n");
scanf("%s",X);
for(j=0;j<k;j++)
{if(strcmp(CL[j].name,X)==0)//查找此人物
{printf("输入修改的地址:\n");
scanf("%s",CL[j].address);
printf("输入修改的学号:\n");
scanf("%s",CL[j].num);
printf("输入修改电话号码:\n");
scanf("%s",CL[j].tpnum);
}
}
ShuChu();
}
void SC() //删除人物的函数
{
char X[10];//存储待删除人物的姓名
int j,l=0;// l:如果存在这个人物l为1否则为0
printf("输入要删除人物的姓名:\n");
scanf("%s",X);
for(j=0;j<k;j++)
{if(strcmp(CL[j].name,X)==0)
{for(;j<k-1;j++)
{CL[j]=CL[j+1];}
k--;l=1; //删除人物通讯录减一
break;
}
}
if(l)printf("要删除的人物已删除:\n");//存在要删除的人物
else printf("要删除的人物不存在:\n");//不存在要删除的人物
ShuChu();
}
void CX() //查询人物的函数
{char a,XX[20];
int j;
printf("以姓名查询输入x\n以电话查询输入t\n以地址查询输入d\n以学号查询输入n:\n");
a=getchar();#为什么这个语句执行不了
if(a=='x'){printf("输入查询人物的姓名:\n");gets(XX);
for(j=0;j<k;j++)
{if(strcmp(CL[j].name,XX)==0)
printf("\t姓名 %s\t地址 %s\t学号 %s\t电话 %s",CL[j].name,CL[j].address,CL[j].num,CL[j].tpnum);}}
else if(a=='t'){printf("输入查询人物的电话:\n");gets(XX);
for(j=0;j<k;j++)
{if(strcmp(CL[j].tpnum,XX)==0)
printf("\t姓名 %s\t地址 %s\t学号 %s\t电话 %s",CL[j].name,CL[j].address,CL[j].num,CL[j].tpnum);}}
else if(a=='d'){printf("输入查询人物的地址:\n");gets(XX);
for(j=0;j<k;j++)
{if(strcmp(CL[j].address,XX)==0)
printf("\t姓名 %s\t地址 %s\t学号 %s\t电话 %s",CL[j].name,CL[j].address,CL[j].num,CL[j].tpnum);}}
else if(a=='n'){printf("输入查询人物的学号:\n");gets(XX);
for(j=0;j<k;j++)
{if(strcmp(CL[j].num,XX)==0)
printf("\t姓名 %s\t地址 %s\t学号 %s\t电话 %s",CL[j].name,CL[j].address,CL[j].num,CL[j].tpnum);}}
else printf("输入有误.重来\n");
}
void main()
{char b;
int i=1;
do{
printf("增加人物输入'z':\n");
printf("修改人物输入'x':\n");
printf("删除人物输入's':\n");
printf("查询人物输入'c':\n");
printf("停止输入则输入'j':\n");
b=getchar();#这个语句到了第二次才能执行执行为什么呢
if(b=='z')ZJ();
else if(b=='x')XG();
else if(b=='s')SC();
else if(b=='c')CX();
else if(b=='j')i=0;
else printf("Error Input!\n");
}while(i);
} 展开
5个回答
展开全部
老兄,是这样的,你的语句中有输入字符型数据或着字符串的,如果连续输入两个比如:
scanf("%c",&a);
scanf("%c",&b);
运行的时候你如果输入了 r回车,s回车,也就是输入字符S后按了回车,然后输入字符S 输入回车,此时变量 b并不能够接受你输入的S,而是接受了回车符号,所以造成好象有个输入语句没有执行一样.
所以你把你的程序中,连续的接受字符或字符串的语句后面都加上个 getchar(),用来接受你的那个回车就没有问题了,源程序我不在帮你该了,你自己加上吧.
scanf("%c",&a);
scanf("%c",&b);
运行的时候你如果输入了 r回车,s回车,也就是输入字符S后按了回车,然后输入字符S 输入回车,此时变量 b并不能够接受你输入的S,而是接受了回车符号,所以造成好象有个输入语句没有执行一样.
所以你把你的程序中,连续的接受字符或字符串的语句后面都加上个 getchar(),用来接受你的那个回车就没有问题了,源程序我不在帮你该了,你自己加上吧.
展开全部
它把你的回车键也接收了当一个字符
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在此句之前加一句flush();//清除缓冲区中的内容
。。。。。。。。。。。
。。。。。。。。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把 a,b的类型改为int类型就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
奇怪!我用VC++ 6.0和VS2005编译一切正常啊,LZ是用什么编译的??????
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询