1
  1. おそらく、c および c スレッドで一般的に印刷がどのように行われるかについての深い説明があれば、問題は解決するでしょう
  2. どの時点でも使用されるループと scanf はありません
  3. 私のコードはチェック フレームワークを使用しているため、分岐が発生していると思います。
  4. ほとんどの場合、それはバッファに関係しているため、fflush(stdout) を使用しています。フレームワーク内の何かが原因である場合は、フレームワークを知っている人が何が起こるかを説明してくれます。
  5. フレームワークのページをチェック check.sourceforge.net
  6. これが何らかの形で役立つ場合はGitリンクhttps://github.com/batousik/Practical-C2
  7. ビルド/テスト ログへのリンク、438 行目で印刷が開始https://travis-ci.org/batousik/Practical-C2/builds/53513707

コードサンプル

START_TEST(test_START_EMPTY_TREE_TREEBASE_PRINT_FREETREE_TEST) {
    printf("_________START_EMPTY_TREE/TREEBASE_PRINT/FREETREE_TEST__________\n");
    fflush(stdout);

    int *ptr;
    for (int i = 0; i < arr_size; i++) {
        ptr = malloc(sizeof(int));
        memcpy(ptr, (int_arr_ptr + i), sizeof(int));
        insert(ptr_tree_base_int_1, ptr);
    }
    // should print tree
    printf("!!!Next lines has to be tree printed out\n");
    fflush(stdout);
    ck_assert_int_eq(printTree(ptr_tree_base_int_1), true);
    printf("_____________________\n");
    fflush(stdout);

    // No output
    ck_assert_int_eq(freeTree(ptr_tree_base_int_1), true);
    // should print cannot free empty tree
    printf("!!!Next line has to be:\"cannot free empty tree\"\n");
    fflush(stdout);
    ck_assert_int_eq(freeTree(ptr_tree_base_int_1), true);

    // should print cannot print empty tree
    printf("!!!Next line has to be:\"cannot print empty tree\"\n");
    fflush(stdout);
    ck_assert_int_eq(printTree(ptr_tree_base_int_1), false);
    printf("_____________________\n");
    fflush(stdout);

    ptr_tree_base_int_1 = NULL;
    free(ptr_tree_base_int_1);

    // should print cannot free empty tree base
    printf("!!!Next line has to be:\"cannot free empty tree base\"\n");
    fflush(stdout);
    ck_assert_int_eq(freeTree(ptr_tree_base_int_1), true);

    // should print cannot print empty tree base
    printf("!!!Next line has to be:\"cannot print empty tree base\"\n");
    fflush(stdout);
    ck_assert_int_eq(printTree(ptr_tree_base_int_1), false);
    printf("_____________________\n");
    fflush(stdout);

    free(int_arr_ptr);
    int_arr_ptr = NULL;
    printf("freeing the array...\n");
    fflush(stdout);
    printf("________END_____________\n");
    fflush(stdout);
    ck_assert_int_eq(ptr_tree_base_int_1->size, 0);
} END_TEST

PrintTree 関数

bool printTree(TreeBase *tree){
void *previous = NULL;
int cnt_tasks = 0;
if (!tree) {
    printf("PRINT: Cannot print empty tree base\n");
    fflush(stdout);
    return false;
}
/* set current to root of binary tree */
TreeNode *current_node = tree->base;
if (!(tree->base)) {
    printf("PRINT: Cannot print empty tree\n");
    fflush(stdout);
    return false;
}
StackNode *stack = NULL;
while (true) {
    if(current_node) {
        push(&stack, current_node);
        current_node = current_node->left;
    } else {
        if (stack) {
            current_node = pop(&stack);
            if (cnt_tasks > 1) {
                if (tree->comp(previous, current_node->value) != -1) {
                    printf("PRINTTREE: Invalid BST\n");
                    fflush(stdout);
                    assert(NULL);
                }
            }
            previous = current_node->value;
            tree->print(current_node->value);
            cnt_tasks++;
            current_node = current_node->right;
        } else {
            return (cnt_tasks == tree->size);
        }
    }
}

}

ツリー -> 印刷機能

void print_ints(void *p){
   printf("%d\n", *(int*)p);
   fflush(stdout);
}

サンプル出力

    FREETREE: Cant free empty tree
    !!!Next line has to be:"cannot free empty tree"
    FREETREE: Cant free empty tree
    FREETREE: Cant free empty tree
    !!!Next line has to be:"cannot print empty tree"
    PRINT: Cannot print empty tree
    PRINT: Cannot print empty tree
    _____________________

それはたくさんのコードです。要点は後で!!! 1行あるはずですが、2行印刷されています

    printf("PRINT: Cannot print empty tree\n");
    fflush(stdout);
    return false;

^^ この行は 2 回出力されます

コメント: 「マクロ」とは何ですか? これはAPIからのものです

#define     ck_assert_int_eq(X, Y)   _ck_assert_int(X, ==, Y)
4

1 に答える 1