Jump to content

Ler número especificado em ficheiro


Bernardxinho

Recommended Posts

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

  • 2 weeks later...

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.