这是我在C中写的代码。
void BFS()
{
int index[4][2];
int p=10,i,j,x,y;
int chld=-1;
int cnt=1;
int size=sizeof(NODE);
char ch='n';
qstart=NULL;
lstart=NULL;
NODE *ptr,*tmp;
NODE* broot=(NODE*)malloc(size);
NODE* bgoal=(NODE*)malloc(size);
memcpy(broot,root,size);
memcpy(bgoal,goal,size);
push_queue(broot);
//---------------------------------------------------------------
//This scanf does not work well, don't read from input stream or console
//---------------------------------------------------------------
printf("Want to see the nodes\t[y/n]\n");
scanf("%c",&ch);
printf("\n\nTOTAL NODE COUNT ");
//---------------------------------------------------------------
while(p>0)
{
if((ptr=pop_queue())!=NULL)
{
positions(ptr,index,&x,&y);
if(ch=='y' || ch=='Y')
{
printf("\t\t\tParent\n");
print_node(ptr);
}
i=0; j=0; chld=-1;
for(i=0;i<4;i++)
if(index[i][0]!=-1)
if((tmp=node_exchange(ptr,broot,index[i][0],index[i][1],x,y))!=NULL)
{
printf("%d",cnt);
j=cnt;
cnt++;
tmp->parent=ptr;
ptr->child[++chld]=tmp;
if(!memcmp(tmp,bgoal,9*sizeof(int)))
{
trace_path(tmp);
printf("Total Nodes Skipped : %d",TOTAL_SKIP);
free_list();
return ;
}
push_queue(tmp);
push_list(tmp);
while(j>0)
{
j=j/10;
printf("\b");
}
}
if(ch=='y' || ch=='Y')
print_child(ptr,chld);
for(i=chld+1;i<4;i++)
ptr->child[i]=NULL;
}
else{
printf("WARNING: popped null\n");
break;
}
// p--;
}
qstart=NULL;
}
这是我程序的一个功能。 scanf调用(通过注释在代码中标记)不会从控制台读取。它在此之后继续执行所有代码,并且不等待它应该执行的输入。我正在使用gcc版本4.4.7 20120313(Red Hat 4.4.7-4)(GCC)和gnome终端。
示例输出为: 请输入初始状态: 初始节点
0 1 2
3 4 5
6 7 8
请输入目标节点: 目标节点
8 7 6
5 4 3
2 1 0
想要查看节点[y / n]
TOTAL NODE COUNT 885 ^ C
相信我,我不知道为什么会发生这样的事情。它应该在语句想要查看节点[y / n] 之后等待,但它不会继续执行进一步
答案 0 :(得分:0)
答案 1 :(得分:0)
您应该使用getch()
或getche()
我认为getche()
会更好,因为它会回应按下的角色。
一般来说,当你给出'是或否'时,#34;在程序中提示,默认为&#34; no&#34;,&#39; n&#39;大写:[y/N]
。