ScanF循环无法读取单个字符

问题描述 投票:0回答:1

我正在执行BST。 (i =插入,s =搜索,p =打​​印)。插入和搜索都接受两个参数,并用一行空格隔开,并执行必要的任务。但是,print仅假定采用one参数p,然后继续打印树。

每当我在命令行参数中输入p或其他任何字符时,循环都在等待其他输入。如果我输入i,然后输入数字,程序将继续执行。 printf语句甚至不会执行,因此ch =='p'甚至不会触发。有什么建议吗?

int main(int argc, char **argv) {

        char ch;
        int i;
        Node *root = NULL;
        while(scanf(" %c",&ch) != EOF) {
                if(ch == 'i') {
                        scanf(" %d", &i);
                        InsertNode(&root, newNode(i));
                }
                if(ch == 's') {
                        scanf(" %d", &i);
                        if(SearchNode(root,i) == 0) {
                                printf("absent\n");
                        }
                        else {
                                printf("present\n");
                        }
                if(ch == 'p') {
                        printf("Trying to recursively print!");
                        return 0;
                        InOrderRecursive(root);
                }
}
}

    return EXIT_SUCCESS;
}
c pointers input scanf binary-search-tree
1个回答
0
投票

每当我在命令行参数中输入p或其他任何字符时,循环都在等待其他输入。

使用自动格式化程序,其原因/修复应显而易见。

int main(int argc, char **argv) {
  char ch;
  int i;
  Node *root = NULL;
  while (scanf(" %c", &ch) != EOF) {
    if (ch == 'i') {
      scanf(" %d", &i);
      InsertNode(&root, newNode(i));
    }
    if (ch == 's') {
      scanf(" %d", &i);
      if (SearchNode(root, i) == 0) {
        printf("absent\n");
      } else {
        printf("present\n");
      } 
      if (ch == 'p') {  // this is never true.
        printf("Trying to recursively print!");
        return 0;
        InOrderRecursive(root);
      }
    }
  }
  return EXIT_SUCCESS;
}
© www.soinside.com 2019 - 2024. All rights reserved.