一个关于while循环的问题

caterpillarous 2015-12-21 10:12:17

为什么我输入1之后函数不中断在getchar那个地方而是直接跳到最上面去了呢
主函数代码如下:
int main(){
int k=0;
int a=0;
int v = 0;
BOOLEAN Visited[MAX_VEX] ;
MGraph *G=(MGraph*)malloc(sizeof(MGraph));
Create_Graph(G);
//VexType vp;
char vp;
VexType vexs[MAX_VEX] ;
UI();
while(1)
{ printf("这是scanf前一句\n");
scanf("%d",&a);
if(a==1)
{
printf("请输入需要增加的顶点元素:");
vp=getchar();
AddVertex(G,vp);
}
if(a==2)
{
printf("请输入在哪两个顶点间增加弧,若在有向图中增加弧,则第一个输入的点是是弧尾第二个输入的是弧头");
int v1=0;
int v2=0;
char vexs[MAX_VEX];
scanf("%d %d",&G->vexs[v1],&G->vexs[v2]);
ArcType *arc=(ArcType*)malloc(sizeof(ArcType));
arc->vex1 = vexs[v1];
arc->vex2 = vexs[v2];
AddArc(G,arc);
}
if(a==5)
{
exit (-1);
}
}
return 0;
}

...全文
87 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
_stonecutter 2015-12-22
  • 打赏
  • 举报
回复
引用 2 楼 caterpillarous 的回复:
[quote=引用 1 楼 hy09070422 的回复:] 因为你输入1,之后按的回车键被getchar接收了,程序已经执行完AddVertex(G,vp);然后才退出的。 这样 scanf("%s\n", &a); 试试
谢谢哈 一般项目中怎么处理这个问题啊 挺想知道的[/quote] 不客气,比如在有的情形下可能会输入回车键,而此时的回车键不是输入的确认,而是在程序中可能会用到,这样的话就只能用getchar了,其他情况下用scanf更多。 此处按输入习惯,没必要用getchar。 个人愚见,仅供参考。
paschen 2015-12-22
  • 打赏
  • 举报
回复

	scanf("%d",&a);
	getchar(); //接收掉\n
caterpillarous 2015-12-21
  • 打赏
  • 举报
回复
引用 1 楼 hy09070422 的回复:
因为你输入1,之后按的回车键被getchar接收了,程序已经执行完AddVertex(G,vp);然后才退出的。 这样 scanf("%s\n", &a); 试试
谢谢哈 一般项目中怎么处理这个问题啊 挺想知道的
_stonecutter 2015-12-21
  • 打赏
  • 举报
回复
因为你输入1,之后按的回车键被getchar接收了,程序已经执行完AddVertex(G,vp);然后才退出的。 这样 scanf("%s\n", &a); 试试

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧