これは私が行ったラボのためのものです。これはC++を使って単純なキューを作成することです。奇妙な出力を与えるCout
#include "Task5.h"
#include <iostream>
using namespace std;
void push(const long &i, node* &n) {
if (n == NULL) {
node *ptr = new node;
ptr -> item = i;
ptr -> next = NULL;
n = ptr;
cout << "Created New Node." << endl;
}
else {
node *ptr = n;
cout << "Created Pointer" << endl;
while (ptr -> next != NULL){
cout << "Finding Next..." << endl;
ptr = ptr -> next;
}
cout << "I'm here." << endl;
node *temp = new node;
temp -> item = i;
ptr -> next = temp;
cout << "Node Created." << endl;
}
}
long pop(node* &n) {
if (n == NULL) cout << "HEY!!! Can't pop an empty queue." << endl;
else {
long val;
node *ptr = n;
n = n -> next;
val = ptr -> item;
delete ptr;
return val;
}
}
int main() {
node *head = NULL;
push(13,head);
push(10,head);
push(18,head);
push(22,head);
cout << pop(head) << endl;
cout << pop(head) << endl;
cout << pop(head) << endl;
cout << pop(head) << endl;
cout << pop(head) << endl;
cout << pop(head) << endl;
}
これは、次のような出力を与えている:
Created New Node. Created Pointer I'm Here. Node Created. Created Pointer Finding Next... I'm here. Node Created. Created Pointer Finding Next... Finding Next... I'm here. Node Created. 13 10 18 22 HEY!!! Can't pop an empty queue. 6296192 HEY!!! Can't pop an empty queue. 6296192
だから、最終的な結果は、コードが動作するということです。しかし、それはランダムに6296192を出力します。多分私は何かを間違って綴じると思ったか、吹き出しがエンドを変換していると思った16進数へ。私の研究室のインストラクターも何が起こっているのか分かりません。誰かが何が起こっているか教えてもらえますか?役立つなら、私はこのコードをLinux実行端末経由で実行しています。
ありがとうございます。
Q:空のキューをポップしようとすると、pop()はどのような値を返しますか? – Mat
コンパイラの警告を立てたり、 "pop"関数で "すべての制御パスが値を返すわけではない"という警告を無視して停止します。それは最初に何かが間違っているかもしれない手がかりだったでしょう。私は "ラボインストラクターも考えていない"ことを願っています、実際には真実ではなく、彼らはあなた自身でそれを見つけることを望んでいました。もしそうでなければ、価値あるもののためにあなたに与えるすべてのものを取ってください(多分そうではないでしょう)。 – WhozCraig
@ NathanOliverは、停止問題の決定不能のために、そうしています。 – Quentin