Ir ao conteúdo
  • Cadastre-se

Como indicar um arquivo para o programa?


eliumoraes

Posts recomendados

Bom dia pessoal,

 

Estou utilizando o Linux para fazer meus programas em C e não sei como indicar um arquivo para fazer testes em casos que preciso utilizar EOF.

Por exemplo, no problema (https://www.urionlinejudge.com.br/judge/pt/problems/view/2029) eu preciso testar com EOF e fiz o seguinte código:

 

#include <stdio.h>

int main(){

	double v,h,a,d;

	while((scanf("%lf %lf",&v,&d))!=EOF){

		a = 3.14*(d/2)*(d/2);
		h = v/a;

		printf("ALTURA = %.2lf\n",h);
		printf("AREA = %.2lf\n",a);
	}
	return 0;
}

Para compilar utilizei o comando :

gcc 2029.c -o 2029.out

. E para executar geralmente uso:

./2029.out

Mas como esse problema exige a indicação de um arquivo para o teste de EOF eu não sei como devo mostrar o arquivo de entrada ao programa.

Link para o comentário
Compartilhar em outros sites

Algumas funções básicas para manipulação de arquivo:

"fopen()" para abrir

"fclose()" para fechar

"fprintf()" para escrever

"fscanf()" para ler

 

OBS: Nunca esqueça de fechar o arquivo após sua utilização, porque isso informa ao sistema operacional que o arquivo estará liberado para acesso de outro programa caso seja necessário.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Para receber o nome do arquivo por parâmetro, utilize os argumentos "argc" e "argv" na função "main()":

 

Spoiler

int main(int argc, char *argv[])
{
    FILE *arquivo = NULL;
    
    if (argc > 1)
    {
        arquivo = fopen(argv[1], "r"); /* Somente leitura */
        
        /* Adicionar aqui: Rotina de leitura e tratamento sobre o conteúdo do arquivo */
        
        fclose(arquivo);
    }

    return 0;
}

 

 

 

O código acima considera que o nome do arquivo seja o primeiro parâmetro repassado ao programa.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Olá pessoal,

 

Acabei descobrindo como fazer. Na verdade quando eu executo ele no terminal costumo fazer:

./2029.out

Para indicar o arquivo com as entradas eu deveria ter feito:

./2029.out < 2029.txt

Onde o 2029.out é o programa compilado e o 2029.txt contém os dados de entrada fornecidos.

 

O que vocês me mostraram é certo, o problema é que eu não soube me expressar direito, pois queria simular o que o servidor do URI faz.

Link para o comentário
Compartilhar em outros sites

Apenas para corrigir sua explicação.

 

O programa não faz a leitura do arquivo, mas sim, da entrada padrão (stdin) através de streaming do conteúdo do arquivo.

Trabalhando desta forma, tanto faz para o programa se o conteúdo vem de arquivo ou de outra forma qualquer que utilize o buffer stdin.

 

Que bom que você descobriu como fazer.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!