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