質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

1211閲覧

バイナリツリーのコード

masuter0413

総合スコア50

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2019/04/25 08:24

二分木のプログラムを作っています.
文字列の読み込みができないのはなぜでしょうか.
ファイルオープンのエラーはありません.

c

1#include <stdio.h> 2#include<stdlib.h> 3#include<string.h> 4 5typedef struct BTREE_ { 6 struct BTREE_ *left, *right; 7 char data[20]; 8}Btree; 9 10Btree *newCell(char *data) { 11 Btree *bp; 12 bp = (Btree *)malloc(sizeof(Btree)); 13 bp->left = NULL; 14 bp->right = NULL; 15 strcpy(bp->data, data); 16 return bp; 17} 18Btree *registBtree(Btree *node, char *newdata) { 19 int len1, len2; 20 len1 = strlen(node->data); 21 len2 = strlen(newdata); 22 if (node == NULL) { 23 node = newCell(newdata); 24 } 25 else if (len2 < len1) { 26 node->left = registBtree(node->left, newdata); 27 } 28 else { 29 node->right = registBtree(node->right, newdata); 30 } 31 return node; 32} 33/* 部分木の全ての値を出力 */ 34Btree *printBtree(Btree *node) { 35 if (node == NULL) { 36 return NULL; 37 } 38 printBtree(node->left); 39 printf("data[%s]\n", node->data); 40 printBtree(node->right); 41 return node; 42} 43int main() { 44 FILE*fp; 45 Btree *start; 46 //int newdata = 0; 47 char newdata[20]; 48 if ((fp = fopen("food.txt", "r")) == NULL) { 49 fprintf(stderr, "%s\n", "error: can't read file."); 50 return EXIT_FAILURE; 51 } 52 fscanf(fp, "%s", newdata);//root 53 start = newCell(newdata); 54 while (fscanf(fp, "%s", newdata) != EOF) { 55 registBtree(start, newdata); 56 } 57 printBtree(start); 58 return 0; 59} 60

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2019/04/25 08:52

food.txt はどのような内容でしょうか. 各部に変数の表示等を入れて, 実際にどのようにプログラムが動いたのかを確認されましたか? されてましたらその時のコードと結果を追記して頂けますでしょうか. されていなければ, まずその確認をして頂いて, コードと共に結果を追記して頂けますでしょうか.
guest

回答2

0

ベストアンサー

ココ↓なんかヘン。

C++

1Btree *registBtree(Btree *node, char *newdata) { 2 int len1, len2; 3 len1 = strlen(node->data); // ←ココでnodeがNULLだったらどーすんの? 4 len2 = strlen(newdata); 5 if (node == NULL) { // ...だからココでの判定は遅すぎるんちゃう? 6 node = newCell(newdata); 7 } 8 else if (len2 < len1) { 9 node->left = registBtree(node->left, newdata); 10 } 11 else { 12 node->right = registBtree(node->right, newdata); 13 } 14 return node; 15}

投稿2019/04/25 19:33

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

文字列の読み込みができないのはなぜでしょうか.

どのように確認しましたか?
デバッガで確認する、、簡易には、fscanf() の後に printf() で入力文字列を出力されたら、どうでしょう。

fscanf() ですが、戻り値は、読み込んだ(変換できた)個数です。 EOFとの比較は意味がありません。 EOFの確認は、feof()または、fscanf()の戻り値が 0以外あたりでの判定でしょうか?

投稿2019/04/25 14:50

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問