无法读取用户的字符

时间:2014-03-25 04:52:58

标签: c scanf

这里在这段代码中我创建了一个二叉树,直到用户想要节点数。 但是当从用户那里获得输入时,它会在某处失败..

   struct node *createTree(struct node *root)
{
  int n;
  char ch;
  struct node *t1;
  t1=(struct node *)malloc(sizeof(struct node));
  printf("Enter Element\n");
  scanf("%d",&n);
  if(root==NULL)
    {
  t1->data=n;
  t1->left=NULL;
  t1->right=NULL;
  root=t1;
    } 

  printf("do you want to add node at left?\n");

这不能正常工作

的scanf( “%C”,&安培; CH);

  if(ch=='y')
    {
      t1->left=createTree(t1->left);

    }


   printf("do you want to add node at right?\n");
   scanf("%c",&ch);

   if(ch=='y')
    {
      t1->right=createTree(t1->right);

    }




  return root;



}

2 个答案:

答案 0 :(得分:1)

这样做:

printf("do you want to add node at right??!\n");
scanf("%c",&ch);
while (getchar()!='\n');  //<-- eat up trailing newline chars - Reads all characters of the line until the end of line is found.

当您输入键盘输入后按Enter键时,缓冲区中会留下一个尾随的换行符,scanf上的下一个呼叫将会读取。

答案 1 :(得分:1)

你必须在scanf中的%c之前给出一个空格

scanf(" %c",&ch);

这是因为在输入后我们按下输入,输入存储在缓冲区中,我们的程序再次读取,有时我们清除我们刷新输入/输出缓冲区,你可以在Linux fflush()查看我认为功能也是如此,有很多方法,但这是我所知道的最简单的方法。 希望对你有用。