概略報告
有益なフィードバックをありがとう。cin.clear()
とても役に立ちました。next
NULLに設定することについての発言もそうでした。しかし、最後の問題 (コメントで診断されたとおり) は、私がCtrl+D
エスケープに使用していて、cin >> k
これを正しく処理していなかったことです。while 条件 (更新されたコードを参照)に追加k > 0
し、負の数でエスケープすると、すべてが機能し始めました。
大量のコードを投稿するのは嫌いですが、これ以上削除することはできないと思います。ポイントは、私のプログラムは最初のゴーアラウンドでは機能しますが、2 番目のゴーアラウンドでは機能しないということです。main
(私が何を意味するかを見るためにスキップしてください。)
#include <iostream>
using namespace std;
struct ListNode {
int data;
ListNode* next;
};
void print_list(ListNode* node) {
cout << node->data << endl;
while ((node = node->next) != NULL) {
cout << node->data << endl;
}
}
ListNode* read_list() {
ListNode *head, *tail;
int k;
head = NULL;
while ((cin >> k) && k > 0) {
if (head == NULL) {
head = tail = new ListNode;
} else {
tail->next = new ListNode;
tail = tail->next;
}
tail->data = k;
tail->next = NULL;
}
return head;
}
int main() {
ListNode *list1, *list2;
list1 = read_list();
print_list(list1); // Works
list2 = read_list();
print_list(list2); // Does not work!
return 0;
}
そして、ここに出力があります:
Press ENTER or type command to continue
1
3
5
7
List1
1
3
5
7
List2
Command terminated
印刷前に終了する方法がわかりますList2
か?(最初の 4 行は stdin からのものです。 を参照してくださいmain
。) ここで何がうまくいかないのでしょうか? 同じロジックが最初に機能する理由がわかりませんが、2回目は機能しません。
おそらく、最初のリンクされたリストのメモリを解放していないためでしょうか?