Bernardxinho Posted January 7, 2021 at 12:21 PM Report Share #620911 Posted January 7, 2021 at 12:21 PM Boas pessoal, estou a tentar ler um numero especificado pelo utilizador de um ficheiro de texto, e o que eu quero fazer é, quando esse valor for encontrado mostra só essa linha do ficheiro Aqui está a minha função void acrescentaUc (int *quantUcs) { int num; FILE *arq; char *ucnr; char Linha[100]; if (*quantUcs == MAXUCS) { printf("\n\nATENCAO: Impossivel inserir nova Uc devido ao limite maximo atingido\n\n"); } else { printf("Insira numero: "); scanf("%d", &num); if(num < MIN_NRUC || num > MAX_NRUC) { printf("ERRO: Numero de UC Invalido"); } else { arq = fopen("ListaUcs.txt", "rt"); if (arq == NULL) { printf("ERRO na abertura do ficheiro\n"); } else { for(int i=0; i < 40; i++) { ucnr = fgets(Linha, 100, arq); if (ucnr) { // Se foi possível ler printf("%s",Linha); } } } fclose(arq); } limpaBufferStdin(); printf("\n\nUc adicionada\n\n"); (*quantUcs)++; } } Link to comment Share on other sites More sharing options...
rbsrbs_dev Posted January 16, 2021 at 08:55 PM Report Share #620991 Posted January 16, 2021 at 08:55 PM Olá Bernardo Fiquei com algumas dúvidas no que pretendes fazer. Queres mostrar a linha `num` do ficheiro, isto é, caso o utilizador introduza o valor 4 mostras a quarta linha do ficheiro ou queres mostrar a linha que contenha o valor `num`? Caso seja a segunda opção, consegues descrever o formato da informação desse ficheiro? Eg: As linhas iniciam com um inteiro seguidas de mais alguma coisa (42 blabla\n) ou por exemplo o valor pode estar presente numa posição aleatoria da linha (bla 42 bla). Deixo uma sugestão de restruturamento do código com early returns para retirar os niveis de indentação e com declaração de variaveis próximas do seu uso. Não és obrigado a declarar as mesmas no início dos blocos caso estejas a compilar para C99 ou early: void acrescentaUc(int *quantUcs) { if (*quantUcs == MAXUCS) { printf("\n\nATENCAO: Impossivel inserir nova Uc devido ao limite maximo atingido\n\n"); return; } printf("Insira numero: "); int num; scanf("%d", &num); if (num < MIN_NRUC || num > MAX_NRUC) { printf("ERRO: Numero de UC Invalido"); return; } FILE *arq; arq = fopen("ListaUcs.txt", "rt"); if (arq == NULL) { printf("ERRO na abertura do ficheiro\n"); return; } for (int i = 0; i < 40; i++) { char *ucnr; char Linha[100]; ucnr = fgets(Linha, 100, arq); if (ucnr) { // Se foi possível ler printf("%s", Linha); } } fclose(arq); limpaBufferStdin(); printf("\n\nUc adicionada\n\n"); (*quantUcs)++; } 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