kati690 Postado Abril 25, 2006 Denunciar Share Postado Abril 25, 2006 Gente, tenho um programa para abrir arquivos em C e armazenar em um vetor. está aí: #include<stdio.h> #include<conio.h> #include<stdlib.h> struct no { char ID[2]; int tamanho; }; typedef struct no No; int main() { No vetor[15]; int N=0,i; char nome[10]; FILE * pFile; pFile = fopen ("myfile.txt","r"); if (pFile!=NULL) { fscanf(pFile,"%d",&N); printf("%d",N); getche(); for (i=0; i < N; i++) { fscanf(pFile,"%s %d",&vetor.ID,&vetor.tamanho); } fclose(pFile); } for (i=0; i<N; i++) { printf("Nome: %s Tamanh %d\n\n",vetor.ID,vetor.tamanho); } getch(); return 0; } O arquivo que ele abre é o seguinte: p1 2 p2 3 p3 20 p4 15 p5 24 *fazer no bloco de notas os valores que vem depois do p... (que podem ser qualquer um) tem que ser armazenados em uma lista circular... Alguém sabe como fazer? Como armazenar o arquivo aberto em uma lista circular? me ajudem por favor Beijinhos!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kati690 Postado Abril 25, 2006 Autor Denunciar Share Postado Abril 25, 2006 Só lembrando... isso não é um trabalho... estou tentando fazer um escalodanor de processos ok?! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Abril 25, 2006 Denunciar Share Postado Abril 25, 2006 Mas, você já implementou as funções para lidar com listas circulares ou têm elas prontas aí?Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest - Kati690 - Postado Abril 25, 2006 Denunciar Share Postado Abril 25, 2006 Tenho a estrutura da lista circular... só não sei como passar do vetor pra lista circular...O código pode ser achado ein: http://www.icmc.usp.br/manuals/ssce763/lcirc.htmlSe puder me ajudar agradeço... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Abril 25, 2006 Denunciar Share Postado Abril 25, 2006 Você sabe percorrer o vetor, certo? Porque é isso que o código abaixo faz:for (i=0; i<N; i++) { printf("Nome: %s Tamanh %d\n\n",vetor[i].ID,vetor[i].tamanho); }Então, bastaria chamar a função de inserção (que tem na página que você indicou) para cada um dos elementos do vetor.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest - Kati690 - Postado Abril 26, 2006 Denunciar Share Postado Abril 26, 2006 void Inserir(Lista *lista, int v) { pNo no; no = (pNo)malloc(sizeof(tipoNo)); nodo->valor = v; if(*lista == NULL) *lista = no; else no->seguinte = (*lista)->seguinte; (*lista)->seguinte = no;}Aquele que tenho, captura o nome dos processos ex: p1 e o valor... Não sei como faço pra atribuir esse valor ao nó! Como ele recebe... como faz a chamada?você me ajuda por favor?! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Abril 26, 2006 Denunciar Share Postado Abril 26, 2006 No caso, você vai ter que alterar a estrutura do nó para poder guardar os dados que você quer. A estrutura daquele lá na página é:typedef struct no { int value; struct no *next; } lista;O importante ali é o int value que é o campo que armazenará o "valor" do nó. No caso, é um inteiro (int). A idéia é trocar ele pelo tipo de dado que você quer armazenar (que pode ser outra estrutura, como a que você declarou no seu código).Não estou com tempo agora, mas posso ver se no próximo final de semana eu faço um exemplo disso pra você. É só me lembrar.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Abril 26, 2006 Denunciar Share Postado Abril 26, 2006 Obrigada! Se puder estou no aguardo! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Abril 30, 2006 Denunciar Share Postado Abril 30, 2006 Como prometido, segue um exemplo:#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct dado { char ID[3]; int tamanho; } Dado; typedef struct no { Dado value; no *next; } Lista; Lista *CriarNo(Dado valorinicial) { Lista *L = (no *)malloc(sizeof(no)); L->value = valorinicial; L->next = L; return L; } Lista *Adicionar(Lista *l, Dado elemento) { Lista *k = CriarNo(elemento); k->next = l->next; l->next = k; return k; } int main() { Dado x = {"p1", 2}; Dado y = {"p2", 3}; Dado z = {"p3", 20}; Lista *L = CriarNo(x); Lista *P = L; P = Adicionar(P, y); P = Adicionar(P, z); Lista *K = L; do { printf("%s = %i\n", K->value.ID, K->value.tamanho); K = K->next; } while (K!=L); system("pause"); }Note que criei três objetos do tipo Dado e os adicionei na lista. Em seguida percorri a lista exibindo os mesmos. É claro que no seu caso estes objetos virão do arquivo, mas você poderá utilizar as funções que criei acima (CriarNo() e Adicionar()).Certo? ;)Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Junho 8, 2008 Denunciar Share Postado Junho 8, 2008 ola, estou com dificuldades para inserir elementos na lista circular em sentido horario (esquerda para direita),só consigo da direita para esquerda - codigo abaixo... alguém pode me ajudar? obrigadovoid insere(char x) { Sold *novo; novo=cria_sold(); novo->nome=x; if(circular==NULL) { novo->prox=novo; circular=novo; } else { novo->prox = circular->prox; circular->prox=novo; } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 KaKarotto Postado Junho 10, 2008 Denunciar Share Postado Junho 10, 2008 NOssa, por que desenterrar um post tão antigo??? Sua dúvida não tem nada haver com aquela...Não faz sentido pra mim mudar o sentido da lista circular...A lista é linear, mesmo sendo usada de forma circular, então se eu entendi direito, você quer colocar elementos no inicio da lista ao invés de colocar no final.Sendo assim, é só criar um novo elemento e apontar seu elemento próximo para o mesmo elemento que o seu ponteiro "cabeça" aponta. Logo em seguida, pegue o ultimo elemento através do ponteiro "cauda" e aponte o seu próximo elemento para o novo elemento criado.Nossa, até de C/C++ o GrayMa manja....caraca irmão....A lenda. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcelo Utikawa da Fonseca Postado Junho 11, 2008 Denunciar Share Postado Junho 11, 2008 NOssa, por que desenterrar um post tão antigo??? Sua dúvida não tem nada haver com aquela...Coveiros detected :ninja: Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
kati690
Gente, tenho um programa para abrir arquivos em C e armazenar em um vetor.
está aí:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
struct no
{
char ID[2];
int tamanho;
};
typedef struct no No;
int main()
{
No vetor[15];
int N=0,i;
char nome[10];
FILE * pFile;
pFile = fopen ("myfile.txt","r");
if (pFile!=NULL)
{
fscanf(pFile,"%d",&N);
printf("%d",N);
getche();
for (i=0; i < N; i++)
{
fscanf(pFile,"%s %d",&vetor.ID,&vetor.tamanho);
}
fclose(pFile);
}
for (i=0; i<N; i++)
{
printf("Nome: %s Tamanh %d\n\n",vetor.ID,vetor.tamanho);
}
getch();
return 0;
}
O arquivo que ele abre é o seguinte:
p1 2
p2 3
p3 20
p4 15
p5 24
*fazer no bloco de notas
os valores que vem depois do p... (que podem ser qualquer um) tem que ser armazenados em uma lista circular...
Alguém sabe como fazer?
Como armazenar o arquivo aberto em uma lista circular?
me ajudem por favor
Beijinhos!!!
Link para o comentário
Compartilhar em outros sites
11 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.