O que tem de errado no código?

1. O que tem de errado no código?

Lucas de Andrade Lessa
lucaslessa

(usa RedHat)

Enviado em 01/09/2006 - 13:49h

"Desenvolver uma aplicação que armazene em um vetor dinâmico os endereços de memória dos locais onde se encontram os nomes das pessoas e em seguida imprima cada nome na ordem recebida"

#include<stdio.h>
#include<iostream.h>
#include<string.h>
#include<conio.h>
#include<malloc.h>
void main()
{

char vnome[254], **lista, *nome, *inicio, *aux;
int qtde;

cout<<"Digite a quantidade de nomes que se deseja incluir: ";
cin>>qtde;

lista =(char **)(malloc(qtde+1));
inicio = *lista;
for(int i=0;i<qtde;i++)
{
printf("\n Digite %\d um nome: ",i+1);
gets (vnome);

nome =(char *)(malloc(sizeof(vnome)+1));
strcpy (nome,vnome);
*lista = nome;
*lista++;

}

inicio = *lista;
for(int i=0;i<qtde;i++)
{
aux = *lista;
cout << &aux << endl;
*lista++;

}
getch();
}





  


2. Re: O que tem de errado no código?

Perfil removido
removido

(usa Nenhuma)

Enviado em 02/09/2006 - 11:28h

Hmmm... vendo o programa assim não vejo nenhum erro. Você está tendo problemas para compilá-lo? Ou ele compilou e quando o programa é executado, ele não faz o que era esperado?


3. espero que não me achem raivoso...

Ricardo Rodrigues Lucca
jllucca

(usa Gentoo)

Enviado em 02/09/2006 - 11:51h

Olá Lucas,

Vamos começar, primeiro o código é em C ou em C++?? Porque no código abaixo você esta misturando os dois... Vou considerar que ele era pra ser só em C.


1 #include<stdio.h>
2 #include<iostream.h>
3 #include<string.h>
4 #include<conio.h>
5 #include<malloc.h>


eu numerei os includes pra comentar que voce não precisa do 2(explico mais pra frente porque). Mas, precisa trocar o 5 pelo "stdlib.h" que deve ser o include certo do malloc.


1 void main()
2 {
3 char vnome[254], **lista, *nome, *inicio, *aux;
4 int qtde;
5 cout<<"Digite a quantidade de nomes que se deseja incluir: ";
6 cin>>qtde;


As linhas 5 e 6 devem ser trocadas pra printf e scanf. Ou, se for em C++, voce deve declarar o include "iostream"(sem o .h lá em cima que o padrão do C++), alem disso é necessario dizer que esta usando o nome de espaço std.


1 lista =(char **)(malloc(qtde+1));
2 inicio = *lista;
3 for(int i=0;i<qtde;i++)
4 {
5 printf("\n Digite %\d um nome: ",i+1);
6 gets (vnome);
7 nome =(char *)(malloc(sizeof(vnome)+1));
8 strcpy (nome,vnome);
9 *lista = nome;
10 *lista++;
11}


Essa forma de parenteses da linha 1 e 7 me confude, mas gosto é gosto... Na linha 6, no linux pelo menos tu vai ter um WARNING por tentar usar essa função.


1 inicio = *lista;
2 for(int i=0;i<qtde;i++)
3 {
4 aux = *lista;
5 cout << &aux << endl;
6 *lista++;
7 }
8 getch();
9 }


Na linha 5, se o programa esta é em C tem que trocar por printf. Se não, vale o que já falei mais pra cima. Além disso, ai tu vai escrever o endereço do ponteiro(é isso mesmo que quer?).
Na linha 6, não me recordo nunca de quem leva prioridade sobre quem. Assim, se o sistema entender "(*lista)++" voce está dizendo pra comer um caracter da string guardada. Já, se for "*(lista++)" voce está dizendo pra lista avançar um endereço pra frente e acessar o conteúdo. Assim, se voce só quer o proximo elemento da lista não precisa daquele "*" na frente.

[]'s






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts