Ir ao conteúdo

Posts recomendados

Postado

Primeiramente, boa noite a todos.

Procurei sobre minha dúvida aqui e não encontrei um tópico que me ajudasse, então criei este.

 

Estou com um pqno problema com meu código. É o seguinte:

- Eu crio uma Pilha;

- Carrego um arquivo txt no programa;

- Insiro a linha lida em uma posição da Pilha;

 

mas na hora de mostrar a Pilha não aparece a frase do arquivo, e sim, números.

Alguém pode me ajudar nessa?

 

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;

#define N 10

struct Pilha
{
	string Musicas[N]; //Mudado de int Muscias[N] para string Musicas[N] a pedido de @1freakday, mas sem sucesso
	int x;
};

Pilha* CriarPilha()
{
	Pilha *p = new Pilha;
	p->x = 0;
	return p;
}

void push(Pilha* p, char* list)
{
	p->Musicas[p->x] = (char)list;
	p->x++;
}

void ImprimeMusicas(Pilha* p)
{
	int tamanho = p->x;
	int cont;

	for (cont = 0; cont < tamanho; cont++)
		cout << p->Musicas[cont] << endl;
}

int main()
{
	FILE *leitura;
	char musicas[50];
	char *aux;
	int i = 1;
	
	Pilha *pMusicas = CriarPilha();

	leitura = fopen("playlist.txt", "rt");
	if (leitura == NULL)
	{
		cout << "Não foi possível abrir sua playlist." << endl;
		return 1;
	}

	while (!feof(leitura))
	{
		aux = fgets(musicas, 50 ,leitura);
		if (aux) //mostra na tela o arquivo lido
			cout << "musica " << i << ": "<< musicas << endl;
		i++;
		push(pMusicas, aux);
	}

	ImprimeMusicas(pMusicas);

	system("pause");

	return 0;
}

Notem, no anexo, que quando imprimo o que foi lido (direto da variável musicas), aparece na tela todas as musicas, mas logo abaixo, o que deveria ser a mesma coisa aparece outros valores.

 

erro.png

playlist.txt

 

Desde já, grato pela atenção e ajuda!

Postado

Boa noite, não entendi muito bem sua Struct de pilha da musicas,  não seria usado char Musicas[N] em vez de :

int Musicas[N];

Pois você ta querendo usar int e o int é usado apenas para inteiros(numeros) e a função ImprimeMusicas(); esta imprimindo esses numeros. 

Troque esse int Musicas[N], por vetor de string, e armazene os nomes das musicas nele, simples.

Postado
12 horas atrás, 1freakday disse:

Boa noite, não entendi muito bem sua Struct de pilha da musicas,  não seria usado char Musicas[N] em vez de :

int Musicas[N];

Pois você ta querendo usar int e o int é usado apenas para inteiros(numeros) e a função ImprimeMusicas(); esta imprimindo esses numeros. 

Troque esse int Musicas[N], por vetor de string, e armazene os nomes das musicas nele, simples.

 

Bom dia, Tinha razão, ali estava errado mesmo e nem reparei... mas mesmo assim continua saindo números ou letras. 

Sabe me dizer o que mais posso fazer? 
Grato pela atenção.

Postado

Teste esse código( @MassakiMsk mudei de (char) para :(char *));

Citação

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;

#define N 10

struct Pilha
{
    string Musicas[N]; //Mudado de int Muscias[N] para string Musicas[N] a pedido de @1freakday, mas sem sucesso
    int x;
};

Pilha* CriarPilha()
{
    Pilha *p = new Pilha;
    p->x = 0;
    return p;
}

void push(Pilha* p, char* list)
{
    p->Musicas[p->x] = (char *)list;
    p->x++;
}

void ImprimeMusicas(Pilha* p)
{
    int tamanho = p->x;

    for (int cont = 0; cont < tamanho; cont++)
        cout << p->Musicas[cont] << endl;
}

int main()
{
    FILE *leitura;
    char musicas[50];
    char *aux;
    int i = 1;
    
    Pilha *pMusicas = CriarPilha();

    leitura = fopen("playlist.txt", "rt");
    if (leitura == NULL)
    {
        cout << "Não foi possível abrir sua playlist." << endl;
        return 1;
    }

    while (!feof(leitura))
    {
        aux = fgets(musicas, 50 ,leitura);
        if (aux) //mostra na tela o arquivo lido
            cout << "musica " << i << ": "<< musicas << endl;
        i++;
        push(pMusicas, aux);
    }

    ImprimeMusicas(pMusicas);

    system("pause");

    return 0;
}

 

Postado
8 minutos atrás, 1freakday disse:

Teste esse código( @MassakiMsk mudei de (char) para :(char *));

 

Tenho uma duvida. Se um dado é char* e eu fizer o cast com (char*) muda alguma coisa? Eu nunca fui de usar cast, então não sei bem como funciona.

Postado

Na verdade não muda a lógica, mas como o sistema esta passando de uma variável char* para string é bom que ele reconheça esse type, pois string já é uma definição de c++ e não c. Mas se você retirar tal cast não vai mudar nada.

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!