我正在学习二叉搜索树。下面给出了一个程序执行基本BST操作的主要功能。所述option
变量选其操作来执行用于switch
带'char'类型输入的无限循环
int main()
{
struct node* tree=NULL;
struct node* ptr=NULL;
struct node* ptrm=NULL;
int val;
int option;
do
{
printf("\n1.Insert Node\n2.Preorder Traversal\n3.Postorder Traversal\n4.Inorder Traversal\n5.find_smallest_element\n6.find_largest_element\n7.Delete Element\n8.Total_nodes\n9.total_external_nodes\n10.total_internal_nodes\n11.Mirror image\n12.Exit\n");
printf("\nEnter option");
scanf("%d",&option);
switch(option)
{
case 1:
printf("\nEnter value to be inserted");
scanf("%d",&val);
tree=insert_element(&tree,val);
printf("\n%d Inserted\n",val);
break;
case 2:
preorder(&tree);
break;
case 3:
postorder(&tree);
break;
case 4:
inorder(&tree);
break;
case 5:
ptr=find_smallest_element(&tree);
printf("\nSmallest element:%d",ptr->data);
break;
case 6:
ptr=find_largest_element(&tree);
printf("\nLargest element:%d",ptr->data);
break;
case 7:
printf("\nEnter value of element to be deleted");
scanf("%d",&val);
tree=delete_node(&tree,val);
break;
case 8:
printf("\nTotal nodes%d",total_nodes(&tree));
break;
case 9:
printf("\nTotal External nodes%d",total_external_nodes(&tree));
break;
case 10:
printf("\nTotal Internal nodes%d",total_internal_nodes(&tree));
break;
case 11:
ptrm=mirror_image(&tree);
}
}while(option!=12);
return 0;
一切正常,当我给int数据作为用于“option'.However输入,当我给一个字符输入程序进入无限循环和显示选项列表反复。
为什么会发生这种情况?
更多细节在这里:https://stackoverflow.com/a/1716066/7034621 – orhtej2
@ orhtej2我加了if条件与scanf如jergason所述。我输入'a',它给出了Err ..输出,但是scanf仍然等待输入。如果我再次输入'2',会发生这种情况 - 输入选项a 错误。 。 。 输入要插入的值 2插入的 1.Insert节点 2.Preorder遍历 3.Postorder遍历 4.Inorder遍历 5.find_smallest_element 6.find_largest_element 7.Delete元 8.Total_nodes 9.total_external_nodes 10.total_internal_nodes 11.镜像 12.退出 输入选项' – zahlen