• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Стек из текстового файла

  • Автор темы Tamchik
  • Дата начала
T

Tamchik

Не могу разобраться с выводом текста из файла на С++ постоянно ошибки (невозможно найти файл в директории и т.п.), может директивы не все подключены??кто нибудь знает как на С++ вывести текстовый файл в консоль??
C++:
#include "stdafx.h"
#include<stack>
#ifdef _UNICODE 
#include <stdio.h>
#include <iostream>
void main()
{
int i, j, t=0;
char c;
char f[10];
FILE *f1;
clrscr();
f1 = fopen("doc.txt", "r"); //открываем файл для чтения
while (!feof(f1))
{
fscanf(f1, "%c", &c); /*считываем очередной символ в переменную с*/
for (j=0; j < strlen(f); j++) //перебор символов строки f
if (c == f[j])
vstek (&top, &ends, c); //вводим символ в стек
else if (f[j]==')')	
puts("Стек:");

getchar();
return 0;

}
 
T

Tamchik

ну вот код выводит текстовый файл и формирует стек
C++:
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <string>
#include <cstring>
#include <stdlib.h>
class Stack
{
static const int MAX = 80;
int st[MAX];
int top;
public:
Stack()
{
top=0;
}
void push (int var)
{
st[--top]=var;
}
int pop( )
{
return st[top++];
}
};

int main()
{
Stack s1;
Stack s2;
const int MAX=9;
char buffer[3][MAX];
int i=0;
int x,j,dlina,k;
std::ifstream infile("LS.txt");
std::cout<<"Stack is created \n"; 
while (!infile.eof())
{
infile.getline(buffer[i],MAX);
std::cout << buffer[i] << std::endl;
i++; //считали данные в массив строк
};
k=0;
dlina=0;

for (i=0;i<9;i++)
{
x=strlen(buffer[i]);
dlina=dlina+x;
for (j=0;j<=x;j++)//данные из массива помещаем в стек
{
s1.push(buffer[i][j]);
k++;
};
};

std::cout<<"Press any key! \n"; 
getchar();
return 0;
}
а как создать стек без употребления класса Stack?? :what?:
 
L

lazybiz

void push (int var) { st[--top]=var; }
Этот код у тебя работать не может. Как ты собираешься адресовать st[-1] ??

Добавлено: При первом же push-е ты выходишь за рамки массива.

Добавлено: Может быть должно быть так:
 
T

Tamchik

Этот код у тебя работать не может. Как ты собираешься адресовать st[-1] ??
да код то работает, во всяком случае содержимое текстового файла выводит как надо, другое дело что стек не получается, так как если бы стек сформировался число 27 было бы внизу, а то последовательность такая же как и в текстовом файле осталась
____.JPG
 
L

lazybiz

Смотри:
C++:
int a[10];
a[-1] = 123;
a[-2] = 456;
Так можно делать?
 
D

DarkKnight

Не могу разобраться с выводом текста из файла на С++ постоянно ошибки (невозможно найти файл в директории и т.п.), может директивы не все подключены??кто нибудь знает как на С++ вывести текстовый файл в консоль??
В таких случаях лучше создавать файл... Тоесть создал файл 12456789.txt и посмотрел где он у тебя создался... Там и директория по умолчанию... Ну или запускать бинарник не из среды, а уже из чистой операционки(консоль, проводник), тогда уж точно текущая директория - директория по умолчанию....
З.Ы. Я сам иногда бывает в VS затуплю по этой части (среда уж очень много каталогов и их совокупностей создает) и иногда даже не знаешь какой каталог будет дефолтный....(вернее знаешь, но иногда терятся начинаешь)

Смотри:
int a[10];
a[-1] = 123;
a[-2] = 456;
Language: cpp

Так можно делать?
Мне тоже Лэйз это очень понравилось ;-)))
 
L

lazybiz

Я хочу, чтобы сначала автор ответил на мой вопрос. А потом поясню кому не понятно.
 
T

Tamchik

В таких случаях лучше создавать файл... Тоесть создал файл 12456789.txt и посмотрел где он у тебя создался... Там и директория по умолчанию... Ну или запускать бинарник не из среды, а уже из чистой операционки(консоль, проводник), тогда уж точно текущая директория - директория по умолчанию....
ну вообщето с чтением текстового файла все ясно,
C++:
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <string>
#include <cstring>
#include <stdlib.h>

int main()
{
const int MAX=9;
char buffer[9][MAX];
int i=0;
std::ifstream infile("LS.txt");
std::cout<<"File LS.txt read \n"; 
while (!infile.eof())
{
infile.getline(buffer[i],MAX);
std::cout << buffer[i] << std::endl;
i++; //считали данные в массив строк
};

std::cout<<"Press Enter!";
getchar();
return 0;
}
я прошу помочь разобраться со стеком. :blink:


Добавлено:
Смотри:
C++:
int a[10];
a[-1] = 123;
a[-2] = 456;
Так можно делать?

лан понятно буду думать своей башкой......
 
L

lazybiz

Потому, что выражение типа array[-1] (в авторском исполнении) будет ссылаться на неопределенный участок памяти.

Вот в таком случае это допустимо:
C++:
	int	i;
int	a[10];
int *b = &a[5];

for ( i = 0; i < 10; i++ ) {
a[i] = i;
cout << i << endl;
}

for ( i = 0; i >= -5; i-- ) {
cout << b[i] << endl;
}
В случае автора - нет.
А вообще я считаю, что модер с репутацией 51 должен это прекрасно понимать...
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!