Ir ao conteúdo

Posts recomendados

Postado

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.

Postado

@ScreenBlack Então, mas no caso eu não posso passar esse comando dentro do programa. Tenho que passar por fora, como argumento na hora da execução dentro do terminal. Isso acontece porque eu não tenho ideia do nome do arquivo que o URI vai passar para o programa executar.

Postado

@eliumoraes Você simplesmente lê uma string depois coloca a string como parâmetro da função fopen()

 

FILE *arq;

scanf("%s", arquivo);//digita o nome do arquivo

arq = fopen(arquivo, "a");

 

 

Postado

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
Postado

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.

Postado

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
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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!