vrael Posted January 5, 2012 at 04:45 PM Report #430272 Posted January 5, 2012 at 04:45 PM Boa tarde, Tenho de fazer um exercicio e uma das partes consiste em receber valores de um txt (devidamente formatados) Exemplo: 1500 50 10 5 800 70 5 7 Recebo um máximo de 60 valores inteiros e não há mínimo. Dúvidas: Como carrego os arrays com os valores do ficheiro txt? (Sendo os arrays multidimensionais r (i,j)) Como faço a condição de paragem (pensei em por um while !=0 mas há alguns valores que podem ser zero)? Se eu quiser fazer uma opção que me permita alterar os valores do ficheiro txt como faço? Tendo em conta que não dei a matéria e tenho de a apresentar Obrigado espero ajuda
pmg Posted January 5, 2012 at 11:40 PM Report #430371 Posted January 5, 2012 at 11:40 PM A maneira mais rapida (e mais "bruta") é recorrendo a funcao fscanf() com o conversor "%d". Este conversor (fscanf(ficheiro, "%d", &numero)) ignora espacos e enters iniciais, depois converte o input num inteiro e devolve 1. Se nao for possivel converter o input da erro devolvendo 0. Se os dados tiverem chegado ao fim da erro devolvendo EOF. Mete o scanf num ciclo e vai passando os valores para o(s) array(s). Nao te esquecas de primeiro abrir o ficheiro nem de o fechar quando terminares (fopen() e fclose()). What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
vrael Posted January 6, 2012 at 11:43 PM Author Report #430623 Posted January 6, 2012 at 11:43 PM #include <iostream> FILE *fp; int r[60][4],c[60][4],t[60][5]; main() { fp = fopen("resist.txt", "r"); int i=0; if (fp==NULL) { printf("\n ERRO\n"); } else { while((fscanf(fp,"%d %d %d %d",&r[i][0],&r[i][1],&r[i][2],&r[i][3]))!=EOF) { i++; } Já estou a conseguir carregar os ficheiros de um txt. Mas eu preciso de ler 3 ou 4 se volto a repetir o código dá-me imensos erros. --'
pmg Posted January 7, 2012 at 12:24 AM Report #430633 Posted January 7, 2012 at 12:24 AM <iostream> nao e um header valido para C nao precisas de variaveis globais a variavel i pode ser definida mais perto do local onde e usada: no else da validacao do fopen. Com estas mudancas podes facilmente repetir o codigo as vezes que quiseres ... mas aconselho-te a fazeres uma funcao em vez de copy/paste. #include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp; int r[60][4], c[60][4], t[60][5]; fp = fopen("resist.txt", "r"); if (fp == NULL) { perror("resist.txt"); // exit(EXIT_FAILURE); } else { int i = 0; while((fscanf(fp, "%d %d %d %d", &r[i][0], &r[i][1], &r[i][2], &r[i][3])) != EOF) { i++; } Falta fechar umas chavetas tal e qual como no codigo que postaste What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
vrael Posted January 7, 2012 at 03:04 PM Author Report #430687 Posted January 7, 2012 at 03:04 PM Hmmm mas eu só posso carregar uma vez os arrays. E preciso de carregar vários ficheiros txt. Ou seja, o array tem de ser global. Como faço para isso acontecer? :S Tentei fazer assim mas só carrega a primeira lista FILE *fp; int r[60][4],c[60][4],t[60][5]; main() { fp = fopen("resist.txt", "r"); int i=0; if (fp==NULL) { printf("\n ERRO\n"); } else { while((fscanf(fp,"%d %d %d %d",&r[i][0],&r[i][1],&r[i][2],&r[i][3]))!=EOF) { i++; } fp = fopen("conden.txt","r"); if (fp==NULL) { printf("\n ERRO\n"); } else { while((fscanf(fp,"%d %d %d %d",&c[i][0],&c[i][1],&c[i][2],&c[i][3]))!=EOF) { i++; } }
pmg Posted January 7, 2012 at 03:41 PM Report #430696 Posted January 7, 2012 at 03:41 PM Ora bem ... suponhamos que o "resist.txt" tem 10 grupos de valores. No fim do ciclo, a variavel i vai ter 10. Esse 10 vai ser usado para meter os valores no array c, donde os primeiros elementos (c[0], c[1], ..., c[9]) vao ficar a zero. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
vrael Posted January 7, 2012 at 04:09 PM Author Report #430706 Posted January 7, 2012 at 04:09 PM Já entendi tenho de voltar a declarar a variavel como 0 ou usar outra. Obrigado 😕 Outra duvida que me surgiu agora caso os profs sejam matreiros if(x[i][j]!=0) Posso usar uma linha tipo esta dentro de um ciclo para fazer os prints do que eu tenho, mas o problema é que alguns valores podem ser zero. Como faço para usar o != mas só se forem todos os elementos da coluna :S Obrigado mais uma vez
pmg Posted January 7, 2012 at 04:24 PM Report #430709 Posted January 7, 2012 at 04:24 PM Outra duvida que me surgiu agora caso os profs sejam matreiros if(x[i][j]!=0) Posso usar uma linha tipo esta dentro de um ciclo para fazer os prints do que eu tenho, mas o problema é que alguns valores podem ser zero. Como faço para usar o != mas só se forem todos os elementos da coluna :S Nao sei se percebi bem ... mas podes usar o && (E) ou o || (OU) para "juntar" varias condicoes // se forem todos diferentes de zero if ((x[i][0] != 0) && (x[i][1] != 0) && (x[i][2] != 0) && (x[i][3] != 0)) /* ... */; // se pelo menos um for diferente de zero if ((x[i][0] != 0) || (x[i][1] != 0) || (x[i][2] != 0) || (x[i][3] != 0)) /* ... */; // se pelo menos um for igual a zero if ((x[i][0] == 0) || (x[i][1] == 0) || (x[i][2] == 0) || (x[i][3] == 0)) /* ... */; // se forem todos iguais a zero if ((x[i][0] == 0) && (x[i][1] == 0) && (x[i][2] == 0) && (x[i][3] == 0)) /* ... */; What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
vrael Posted January 7, 2012 at 04:39 PM Author Report #430712 Posted January 7, 2012 at 04:39 PM Mais um problema resolvido 😕 Agora vou estudar como alterar ficheiros Obrigado pela ajuda pmg
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