Я работаю над проектом и не могу преодолеть пару ошибок. Вот мой код
main ()
#include <iostream>
#include <cstddef>
#include "src\DynStack.cpp"
#include "include\DynStack.h"
#include "src\DynQue.cpp"
#include "DynQue.h"
#include <fstream>
using namespace std;
int main ()
{
ifstream inputFile;
ofstream outputFile;
DynStack<char>cstack;
inputFile.open("input.txt");
if (!inputFile)
{
cout << "Error. No input file found." << endl;
}
else
{
char x;
while (!inputFile.eof())
{
inputFile.get(x);
cstack.push(x);
cout << x;
}
inputFile.close();
outputFile.open("output_reverse.txt");
char y;
int count = 1;
while (cstack.isEmpty() == NULL)
{
cstack.pop(y);
cout << y;
count++;
}
outputFile.close();
}
cout << "Program completed." << endl;
return 0;
}
DynStack. cpp
#include "DynStack.h"
#include <cstddef>
#include <iostream>
using namespace std;
template<typename T>
DynStack<T>::DynStack()
{
top = NULL;
}
template<typename T>
void DynStack<T>::push(T val)
{
StackNode *nodePtr; // ptr to traverse thru the stack
StackNode *previousNode; // ptr to connect higher node to node below it
StackNode *newNode;
newNode = new StackNode; // makes a new StackNode
newNode->value = val;
newNode->next = NULL;
if (top == NULL) // If the stack is empty
{
top = newNode; // Make newNode the first node;
}
else
{
nodePtr = top; // make our ptr = top
newNode->next = nodePtr; // make the our new top node, newNode, point to the node below it
top = newNode; // newNode is our new top of the stack
delete nodePtr;
}
}
template <typename T>
void DynStack<T>::pop(T& val)
{
StackNode *nodePtr; // makes a nodePtr to traverse the stack
nodePtr = top; // set nodePtr to point to top of stack
if (top == NULL) // If stack is empty
{
cout << "Error. Stack is empty." << endl; // Provide error message.
return;
}
else if (top->next == NULL) // If there is only one item in stack
{
val = top->value; // Make return value whatever the previous top was
delete top; // Delete top
top = NULL; // make top equal to null
}
else // If there is more than one item in stack
{
val = top->value; // Return value whatever previous top was
nodePtr = nodePtr->next; // nodePtr point to node below top node
delete top; // delete top node
top = nodePtr; // make nodePtr our new top
delete nodePtr; // delete the nodePtr
}
}
template <typename T>
bool DynStack<T>::isEmpty()
{
if (top == NULL) // If top node is null return true
{
return true;
}
if (top != NULL) // If top node is not null return false
{
return false;
}
}
template <typename T>
DynStack<T>::~DynStack()
{
//dtor
}
DynStack.h
#ifndef DYNSTACK_H
#define DYNSTACK_H
template <typename T>
class DynStack
{
private:
struct StackNode
{
T value;
StackNode *next;
};
public:
DynStack();
~DynStack();
void push(T);
void pop(T&);
bool isEmpty();
StackNode *top;
};
#endif // DYNSTACK_H
Идея этой программы заключается в мы берем входной файл «input.txt» со словами «Это оригинальный файл». и вывести его в другой текстовый файл в обратном порядке. Итак, ".elif lanigiro eht si sihT".
Мои проблемы:
для одного, когда я запускаю этот код, он печатает while (! InputFile.eof ()) просто отлично. Когда он запускается второй, пока l oop, а (cstack.isEmpty () == NULL) он печатает бесконечно. Я полагаю, что должно быть что-то не так с моей функцией pop () или isEmpty (), но я просто не вижу, что мне не хватает. Возможно, я устанавливаю top в NULL неправильно в pop (), но я не вижу, что изменить. Может быть, что-то не так с isEmpty (), но это кажется настолько простым, что я не знаю, что добавить.
Что еще важнее, хотя, когда я пытаюсь запустить это, вывод, который я получаю второй раз Я oop кажется, каждый раз по-другому. Иногда это ".ееее" повторяется. Иногда его ".el.el.el" повторяется. Иногда повторяется ".elif.elif.elif". Повторение «.elif.elif.elif» - это наиболее близкий к правильному выводу результат, так что, возможно, что-то не так с выводом или сохранением пробела ??
Понятия не имею. Если бы кто-нибудь мог увидеть, что случилось, и объяснить это мне, я был бы очень в долгу. Спасибо всем.