arquivo txt em lista

25. Re: arquivo txt em lista

Ronilson Brunhara
RBCOL

(usa Outra)

Enviado em 24/05/2015 - 19:38h


amigo estou montado outro lista encadeada, na ora de imprimir com a chamada seleciona só imprime a ultima frase de string digitada se vc puder me ajudar a encontrar o erro eu agradeço.

a frase a ser digitada é esta: INSERE ('Nota da Prova de BD-I', 'Tirei nota 10')


codigo:


#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <string>


using namespace std;

int cont = 1;

struct lista {
struct lista *prox;
string *texto;
string *titulo;
int codigo;
};

typedef struct lista Lista;


Lista* inicializa() {
return NULL;
}

Lista* insere (Lista *p, string *titulo1, string *texto1 ) {
Lista* novo = (Lista*)malloc(sizeof(Lista));

novo->texto = texto1;
novo->titulo = titulo1;
novo->prox = p;
cont++;

return (novo);
}

void imprime(Lista *p) {
Lista *l;
if(p == NULL) {
cout << " Lista vazia\n";
return ;
}

for(l = p; l != NULL; l = l->prox)
cout << " \nCodigo: " << l->codigo << " \ntitulo: " << *l->titulo << " \nTexto: " << *l->texto << "\n\n";
}

bool vazia (Lista* l) {
return(l == NULL);
}

Lista* altera (Lista *p, int v, string *titulo2, string *texto2) {

Lista *l = p;


while(l != NULL && l->codigo != v) {
l = l->prox;

}
if(l == NULL) {
cout << " Comando nao encontrado";
return (l);
}
l->titulo = titulo2;
l->texto = texto2;


return (l);
}

Lista* exclui (Lista *p, int v) {
Lista *ant = NULL;
Lista *l = p;

while(l != NULL && l->codigo != v) {
ant = l;
l = l->prox;
}
if(l == NULL)
cout << " Nao encontrado";
return p;
if(ant == NULL) {
p = l->prox;
} else {
ant->prox = l->prox;
}
free(l);
return p;
}

int main() {
Lista* lista = inicializa();

string comando;
string cmd;
string aux;
string aux2;

cout << "\n\t\t ANOTAI\n\n\n";

do{

//cout << "\n 1 - INSERE \n 2 - ATUALIZA \n 3 - DELETA \n 4 - SELECIONA \n 0 - SAIR\n\n";
cout << "\n Linha de comando: ";
getline(cin, comando);
int i = 0;

while(comando[i] != '\0' && comando[i] != '('){
cmd = comando.substr(0,6);
i++;
}

if ( cmd == "INSERE") {

while(comando[i] != '\''){
i++;
}
aux = comando.substr(i+1);
int f = 0;
while(aux[f] != '\''){
f++;
}
aux = aux.substr(0,f);

while(comando[i] != ','){
i++;
}
while(comando[i] != '\''){
i++;
}
aux2 = comando.substr(i+1);
int c = 0;
while(aux2[c] != '\''){
c++;
}
aux2 = aux2.substr(0,c);
cout << aux << "\n" << aux2 << "\n";

lista = insere(lista, &aux, &aux2);


} else if(comando.substr(0,8) == "ATUALIZA") {
//lista = altera(lista);
} else if (cmd.substr(0,6) == "DELETA") {
char op1[5];
int inc = 0;
string a = cmd.substr(7);
while(a[inc] != '\0'){
op1[inc] = a[inc];
inc++;
}
int valordeleta = atoi(op1);

lista = exclui(lista, valordeleta);


} else if (comando.substr(0,9) == "SELECIONA") {
imprime(lista);
} else{
cout << " Comando invalido!\n\n";
}
}
while (cmd != "SAIR");
system ("PAUSE");

return(0);
}





  


26. Re: arquivo txt em lista

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 25/05/2015 - 10:53h

Amigo, não consegui compilar por que têm código de Windows. E eu uso Linux! // Já Falei isso!

Pra quê tantos includes?

Pra quê utilizar o system pause?

Pra ter uma ideia, olha só o tanto de coisas que a função System Faz:


É bom evitar o uso de system() (especialmente para coisas triviais, como limpar tela ou fazer pausa)

A principal razão é que system() custa caro. Cada chamada a system()

1) cria um processo novo;
2) bloqueia a execução do programa original, esperando o processo novo acabar;
3) no processo novo, executa o interpretador de comandos (comumente chamado de shell) padrão do sistema (/bin/sh no mundo UNIX, CMD.EXE no Windows, COMMAND.COM no DOS, etc.), passando como argumento desse shell a string especificada como argumento de system(), para que ele interprete o comando da forma apropriada;
4) o shell, então, interpreta o comando informado;
5) se o comando puder ser totalmente resolvido pelo próprio shell (melhor hipótese), ele o executa e termina; no entanto, num caso geral, esse comando faz uso de utilitários externos ao próprio shell, o que pode demandar a criação de novos subprocessos e a execução de outros programas externos (cada um deles com um fluxo parecido com este que estou descrevendo);
6) quando o shell termina, termina também o seu processo (o que havia sido criado no passo 2);
7) o sistema operacional informa sobre o final do processo ao programa original, que prossegue com a execução;
8) ainda dentro de system(), o programa tenta recuperar o código informado como resultado da execução do comando (tal código é justamente aquele que corresponde ao valor de retorno de main(), discutido acima);
9) dependendo do tipo do sistema operacional, a função system() intrepeta e possivelmente manipula o valor recebido, e retorna para quem a chamou um valor inteiro dependente dessa interpretação/manipulação;
10) você, que chamou system(), deveria também tratar o valor que ela lhe devolveu.


Pra que utilizar então para coisas triviais? Como limpar a tela ou "pausar" a tela?

Usar

cout << "Pressione Enter para Continuar...\n";
cin.get();



Faz a mesma função, mas é do C++, e não tem o custo de tudo isso.
Espero ter ajudado


Eu posso mandar o código que aparentemente funciona, e modificado para funcionar no linux e no windows. Não venha mais com code de windows. Isso dificulta tudo, até por que você está numa comunidade de Linux. Não estou brigando, apenas estou dizendo isso para facilitar a sua e a minha vida.


#include <iostream>

using namespace std;

int cont = 1;

struct lista
{
struct lista *prox;
string *texto;
string *titulo;
int codigo;
};

typedef struct lista Lista;


Lista* inicializa()
{
return NULL;
}

Lista* insere (Lista *p, string *titulo1, string *texto1 )
{
// Voce ta usando o C++!
Lista* novo = new Lista;
novo->texto = texto1;
novo->titulo = titulo1;
novo->prox = p;
novo->codigo = cont++;

return (novo);
}

void imprime(Lista *p)
{
Lista *l;
if(p == NULL)
{
cout << " Lista vazia\n";
return ;
}

for(l = p; l != NULL; l = l->prox)
cout << " \nCodigo: " << l->codigo << " \ntitulo: " << *l->titulo << " \nTexto: " << *l->texto << "\n\n";
}

bool vazia (Lista* l)
{
return(l == NULL);
}

Lista* altera (Lista *p, int v, string *titulo2, string *texto2)
{

Lista *l = p;


while(l != NULL && l->codigo != v)
{
l = l->prox;

}
if(l == NULL)
{
cout << " Comando nao encontrado";
return (l);
}
l->titulo = titulo2;
l->texto = texto2;


return (l);
}

Lista* exclui (Lista *p, int v)
{
Lista *ant = NULL;
Lista *l = p;

while(l != NULL && l->codigo != v)
{
ant = l;
l = l->prox;
}
if(l == NULL)
cout << " Nao encontrado";
return p;
if(ant == NULL)
{
p = l->prox;
}
else
{
ant->prox = l->prox;
}
free(l);
return p;
}

int main()
{
Lista* lista = inicializa();

string comando;
string cmd;
string aux;
string aux2;

cout << "\n\t\t ANOTAI\n\n\n";

while(1)
{
cout << "\nLinha de comando: ";
getline(cin, comando);
int i = 0;

while(comando[i] != '\0' && comando[i] != '(')
{
cmd = comando.substr(0,6);
i++;
}

if ( cmd == "INSERE")
{

while(comando[i] != '\'')
{
i++;
}
aux = comando.substr(i+1);
int f = 0;
while(aux[f] != '\'')
{
f++;
}
aux = aux.substr(0,f);

while(comando[i] != ',')
{
i++;
}
while(comando[i] != '\'')
{
i++;
}
aux2 = comando.substr(i+1);
int c = 0;
while(aux2[c] != '\'')
{
c++;
}
aux2 = aux2.substr(0,c);
cout << aux << "\n" << aux2 << "\n";

lista = insere(lista, &aux, &aux2);


}
else if(comando.substr(0,8) == "ATUALIZA")
{
}
else if (cmd.substr(0,6) == "DELETA")
{
/*char op1[5];
int inc = 0;
string a = cmd.substr(7);
while(a[inc] != '\0')
{
op1[inc] = a[inc];
inc++;
}
int valordeleta = atoi(op1);

lista = exclui(lista, valordeleta);*/

//lista = exclui(lista,a.length());
}
else if (comando.substr(0,9) == "SELECIONA")
{
imprime(lista);
}
else if(comando.substr(0,5) == "SAIR"){
cout << "Ok! Ateh Mais!\n";
break;
}else{
cout << " Comando invalido!\n\n";
}
}

cout << "Digite Enter para Continuar...\n";
cin.get();

return(0);
}


NOTA: Coloque seu código entre as tags [i]Aqui vai o código[/i]

Espero ter ajudado!

[]'s

T+

--

Dr. quanto tempo de vida eu tenho?
- 15 minutos.
E o que o Sr. pode fazer por mim?
- No máximo, um miojo. = )




27. Re: arquivo txt em lista

Ronilson Brunhara
RBCOL

(usa Outra)

Enviado em 25/05/2015 - 19:38h


ok, amigo vc ajudou muito te agradeço, valeu.


28. Re: arquivo txt em lista

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 25/05/2015 - 19:42h

RBCOL escreveu:


ok, amigo vc ajudou muito te agradeço, valeu.


Marque o tópico como resolvido e clique em melhor resposta!
Para deixar o tópico organizado e caso alguem tenha a mesma dúvida, que ela seja solucionada mais rapidamente!

Espero ter ajudado

[]'s

T+

--

Quantos programadores são necessários para trocar uma lâmpada?
R: Não é possível ser feito. É um problema de hardware.





01 02 03



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts