Задача:Написать программу для моделирования Т-образного сортировочного узла на железной дороге с использованием контейнерного класса stack. Программа должна разделять на два направления состав, состоящий из вагонов двух типов (на каждое направление формируется состав из вагонов одно го типа). Предусмотреть возможность ввода исходных данных с клавиатуры и из файла.
Всем привет нужна помощь ввести и вывести данные с клавиатуры, вывод из файла я уже реализовал не могу понять как с клавы сделать помогите решить. Вот пример кода
#include <iostream>
#include <fstream>
class CMyStack {
public:
CMyStack();
~CMyStack();
void Push(int d);
int Pop();
bool isEmpty();
void Print();
private:
struct Node {
int d;
Node *p;
};
Node *top;
};
CMyStack::CMyStack() :top(NULL) {}
void CMyStack::Push(int d) {
Node *pv = new Node;
pv->d = d;
pv->p = top;
top = pv;
}
int CMyStack::Pop() {
if (isEmpty()) {
return -1;
}
int temp = top->d;
Node *pv = top;
top = top->p;
delete pv;
return temp;
}
bool CMyStack::isEmpty() {
return top ? false : true;
}
void CMyStack::Print() {
while (top) {
std::cout << Pop() << ' ';
}
std::cout << std::endl;
}
CMyStack::~CMyStack() {
while (top) {
Node *pv = top;
top = top->p;
delete pv;
}
}
void emptyStack(CMyStack & stack);
int main() {
CMyStack TrainBase, OneTrain, TwoTrain;
std::ifstream in("trains.txt", std::ios::in);
if (!in) {
std::cout << "Cannot open file 'trais.txt' for reading" << std::endl;
return 1;
}
while (!in.eof()) {
int pr;
in >> pr;
TrainBase.Push(pr);
}
while (!TrainBase.isEmpty()) {
int pr = TrainBase.Pop();
switch (pr) {
case 1:
OneTrain.Push(pr);
break;
case 2:
TwoTrain.Push(pr);
break;
}
}
OneTrain.Print();
TwoTrain.Print();
int _getch();
system("pause");
return 0;
}
void emptyStack(CMyStack & stack) {
if (stack.isEmpty()) {
std::cout << "Stack is empty" << std::endl;
} else {
std::cout << "Stack is not empty" << std::endl;
}
}
Если ваша проблеиа только в том, как реализовать и вывод с файла и вывод с клавиатуры, то это легко решается, если вы свой код напишете в функции, а в программе просто вызовите функцию с файловым обьектом или с std::cin:
void programm(std::istream& input)
{
CMyStack TrainBase, OneTrain, TwoTrain;
std::stack TrainBase, OneTrain, TwoTrain;
int pr;
while (input >> pr) // здесь я ввел поправку
TrainBase.Push(pr);
while (!TrainBase.isEmpty()) {
int pr = TrainBase.Pop();
switch (pr) {
case 1:
OneTrain.Push(pr);
break;
case 2:
TwoTrain.Push(pr);
break;
}
}
OneTrain.Print();
TwoTrain.Print();
}
int main()
{
std::ifstream in("trains.txt", std::ios::in);
if (!in) {
std::cout << "Cannot open file 'trais.txt' for reading" << std::endl;
return 1;
}
// вызываем функцию с программой для ввода с клавиатуры
programm(std::cin);
// или для ввода из файла
programm(in);
return 0;
}
Я просто переписал ваш код с маленькой поправкой, но не думаю, что это то, что требует ваша задача
Виртуальный выделенный сервер (VDS) становится отличным выбором
На данный вопрос уже ответили:
Я любитель очень красивого и оптимального программного кода, и, возможно, мой вопрос не совсем важныйВсем известно, что код:
Работаю с TCP и столкнулся с вопросом, который по факту упирается в понимание протокола