【问题标题】:ScanF Loop Fails to Read Single Character [closed]ScanF 循环无法读取单个字符 [关闭]
【发布时间】:2020-06-07 15:48:05
【问题描述】:

我正在实施 BST。 (i = 插入,s = 搜索,p = 打印)。插入和搜索都采用一行中用空格分隔的两个参数,并执行必要的职责。然而,print 只是假设接受 一个 参数 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;
}

【问题讨论】:

  • 修复你的缩进,你可能会发现问题。 p 块位于 s 块内。使用调试器也是一个好主意 - 您可以逐行执行代码。
  • 另外,char 类型不能保存 EOF 值。

标签: c pointers input scanf binary-search-tree


【解决方案1】:

每当我在命令行参数中输入 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;
}

【讨论】:

    猜你喜欢
    • 2020-05-17
    • 2016-02-19
    • 2021-12-13
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 2013-07-19
    相关资源
    最近更新 更多