Samcity Posted April 23, 2015 at 05:14 PM Report Share #581736 Posted April 23, 2015 at 05:14 PM 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. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 23, 2015 at 06:28 PM Report Share #581742 Posted April 23, 2015 at 06:28 PM 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 Portugol Plus Link to comment Share on other sites More sharing options...
Samcity Posted April 23, 2015 at 07:01 PM Author Report Share #581745 Posted April 23, 2015 at 07:01 PM 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? Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 23, 2015 at 07:07 PM Report Share #581746 Posted April 23, 2015 at 07:07 PM 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 Portugol Plus Link to comment Share on other sites More sharing options...
Samcity Posted April 23, 2015 at 07:12 PM Author Report Share #581747 Posted April 23, 2015 at 07:12 PM 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) Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 23, 2015 at 07:28 PM Report Share #581749 Posted April 23, 2015 at 07:28 PM sabes então à partida o número total de linhas e colunas ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Samcity Posted April 23, 2015 at 07:31 PM Author Report Share #581751 Posted April 23, 2015 at 07:31 PM Sim, o numero de conjuntos é o utilizador que indica e o numero de pessoas é o que constam num outro ficheiro binário. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 23, 2015 at 07:35 PM Report Share #581752 Posted April 23, 2015 at 07:35 PM então basta alocar um array multi-dimensional IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Samcity Posted April 25, 2015 at 07:08 PM Author Report Share #581851 Posted April 25, 2015 at 07:08 PM 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 Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 26, 2015 at 04:11 PM Report Share #581878 Posted April 26, 2015 at 04:11 PM 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 Portugol Plus Link to comment Share on other sites More sharing options...
Samcity Posted April 27, 2015 at 02:06 PM Author Report Share #581925 Posted April 27, 2015 at 02:06 PM (edited) 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 Edited April 27, 2015 at 03:32 PM by apocsantos geshi Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 27, 2015 at 02:30 PM Report Share #581929 Posted April 27, 2015 at 02:30 PM o ficheiro que texto foi criado no windows ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Samcity Posted April 27, 2015 at 02:48 PM Author Report Share #581930 Posted April 27, 2015 at 02:48 PM O ficheiro de texto é criado pelo programa, numa função que tenho de gerar a distribuição Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 27, 2015 at 03:33 PM Report Share #581935 Posted April 27, 2015 at 03:33 PM 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 Portugol Plus Link to comment Share on other sites More sharing options...
Samcity Posted April 27, 2015 at 05:43 PM Author Report Share #581957 Posted April 27, 2015 at 05:43 PM (edited) 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; } Edited April 27, 2015 at 05:44 PM by apocsantos geshi Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 27, 2015 at 06:01 PM Report Share #581964 Posted April 27, 2015 at 06:01 PM 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 Portugol Plus Link to comment Share on other sites More sharing options...
Samcity Posted April 27, 2015 at 06:22 PM Author Report Share #581967 Posted April 27, 2015 at 06:22 PM Continua sem reconhecer a mudança de linha.. Não sei mesmo porquê Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now