Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Samcity

Ler inteiro de um ficheiro de texto

Mensagens Recomendadas

Samcity

Boa Tarde.

Estou com umas duvidas de como ler a informação de um ficheiro de texto que posteriormente vai ser guardada numa lista ligada.

Exemplo de informação do ficheiro de texto:

1 2 4 5 7 8

3 5 7

3 4 6 8

2 6 7

A minha dúvida é, como consigo ler inteiro a inteiro até à mudança de linha, tendo em conta que o numero de elementos varia de linha para linha.

*Eu sei o tamanho máximo de linhas e de colunas

Obrigado desde já.

Boa tarde.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

pedes para ler um inteiro, se não leu é porque tens uma mudança de linha.

como verificas se leu ? através do valor de resultado da chamada da função usada.


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Samcity

Obrigado!

Já agora, eu preciso de guardar esses dados numa tabela alocada dinamicamente ou numa lista ligada, sendo que as linhas representam conjuntos de pessoas e as colunas aos pessoas da lista.

Qual a maneira mais correcta e mais lógica de guardar?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

como sabss a que coluna corresponde um elemento de uma linha ? isto porque se cada linha tem um número diferente de elementos ...


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Samcity

Não entendi.

Cada linha representa um conjunto diferente e os elementos que estão na linha, são os id's das pessoas que fazem parte do conjunto(linha)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Samcity

Sim, o numero de conjuntos é o utilizador que indica e o numero de pessoas é o que constam num outro ficheiro binário.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Samcity

Com listas ligadas não é mais fácil?

Não estou a consegui detectar o final de cada linha, não consegue arranjar nenhum exemplo?

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo
Em 4/25/2015 às 20:08, Samcity disse:

Com listas ligadas não é mais fácil?

não

Em 4/25/2015 às 20:08, Samcity disse:

Não estou a consegui detectar o final de cada linha, não consegue arranjar nenhum exemplo?

#include <stdio.h>

int main(int argc, char** argv) {
int num, run = 1;
char c;

while (run) {
	c = getchar();
	switch(c) {
		case '\n':
			printf("\n");
			break;
		case EOF:
			run = 0;
			break;
		default:
			ungetc(c, stdin);
			if (scanf("%d", &num))
				printf("num:%d ", num);
			break;
	}
}

return 0;
}
 

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Samcity

Continua a não encontrar o final de cada linha.

O código está assim:


while (run) {
s = getc(f);
switch (s) {
case '\n':
printf("\n");
break;
case EOF:
run = 0;
break;
default:
ungetc(s, f);
if (fscanf(f, "%d", &id_pessoa))
printf("%d\t", id_pessoa);
break;
}
}


Está a ler tudo bem só que não muda de linha.

Input do ficheiro de texto:

1 2 3 4 5 7 8

1 4 6 7

2 3 4 5 6

Output do programa:

1 2 3 4 5 7 8 1 4 6 7 2 3 4 5 6

Editado por apocsantos
geshi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

e podes apresentar essa função ?

é que tenho quase a certeza de que será o problema, mas prefiro ter a certeza antes de dizer algo que poderá estar errado.

e já agora, responde à pergunta !!!

o ficheiro que texto foi criado no windows ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Samcity

Sim foi criado em windows.

A função é esta:

A função foi dado pelo professor, porque isto é para um trabalho prático, por isso não deve ser aí o problema, eu só acrescentei a ultima parte, de mudar o nome do ficheiro


int cria_distribuicao(int n_pessoas, int conj, char *txt)
{
int conta[n_pessoas];
int pertence[n_pessoas];
int fixo[n_pessoas];
int i, j, pos, x;
char ficheiro[100];
int number=0, num=1, numero=0;

FILE *f;


if(n_pessoas < 6 || conj < 3 || conj > n_pessoas/2)
{
	printf("Configuracao errada\n");
	return 0;
}

memset(conta, 0, sizeof(conta));
srand((unsigned)time(NULL));

preenche_fixo(fixo, n_pessoas, conj);

f = fopen(txt, "w");
if(f == NULL)
	return 0;

for(i=0; i	{
	memset(pertence, 0, sizeof(pertence));
	x = random_int(2, 3*n_pessoas/conj);

	for(j=0; j			if(fixo[j] == i)
		{
			pertence[j] = 1;
			x--;
		}

	for(j=0; j		{
		do{
			pos = random_int(0, n_pessoas-1);
		}while(pertence[pos]==1 || conta[pos]==2);
		pertence[pos] = 1;
		conta[pos]++;
	}

	for(j=0; j			if(pertence[j] == 1)
			fprintf(f, "%d\t", j+1);
	fprintf(f,"\n");
}

fclose(f);

//MUDA O NOME DO FICHEIRO DE TEXTO
sprintf(ficheiro, "distribuicao%d.txt", num);
//rename(txt, ficheiro);

if ((rename(txt, ficheiro))==-1){

	for (number = 0; number <= 100; number++){

		numero = num + number;

		sprintf(ficheiro, "distribuicao%d.txt", numero);

		if ((rename(txt, ficheiro)) ==0){

			rename(txt, ficheiro);

			printf("\n\nFicheiro guardado com o nome: %s \n", ficheiro);
			printf("\n\n");

return 1;
		}
	}

}
printf("\n\nFicheiro guardado com o nome: %s \n", ficheiro);
printf("\n\n");
return 1;
}


Editado por apocsantos
geshi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

como foi criano no windows, vou assumir que o problema seja a porcaria do '\r' ...

#include <stdio.h>

int main(int argc, char** argv) {
   int num, run = 1;
   char c;

   FILE* fd;
   fd = fopen("input.txt", "r");

   while (run) {
       c = fgetc(fd);
       switch (c) {
           case '\r':
          	 break;
           case '\n':
               printf("\n");
               break;
           case EOF:
               run = 0;
               break;
           default:
               ungetc(c, fd);
               if (fscanf(fd, "%d", &num))
                   printf("num:%d ", num);
               break;
       }
   }

   fclose(fd);

   return 0;
}


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.