Jump to content

Dúvida com leitura de tabela a partir de um ficheiro


tmoreira88
 Share

Recommended Posts

Boas, sou novo aqui no fórum e tenho uma dúvida em relação ao já descrito no título do tópico (desde já peço desculpa se for repost mas eu fiz procurar e não encontrei nada)

o que se passa é o seguinte, tenho um trabalho para fazer no qual eu tenho que ir procurar um valor a uma tabela num ficheiro .txt e armazená-lo numa outra variável.

Deixo o meu problema então:

TabelaC.txt:

Cilindrada (cm3) Taxa única

De 180cm3 até 750cm3 51,30 €

Mais de 750cm3 102,50 €

Queria que dado o valor da cilindrada inserido pelo utilizador, o programa vá procurar em que "limites" se insere na tabela e de seguida guarde o valor da taxa única numa outra variável.

if(stricmp(carro.tipo, "ligeiro") != 0){
	if(carro.cilindrada < 180)
		imposto.imposto_calculado = 0;
	else
		if(carro.cilindrada <= 750 || carro.cilindrada >= 180){
                                                           (...)
}			

Queria saber o que tenho que meter neste if portanto... :wallbash:

Obrigado e Cumprimentos.

Link to comment
Share on other sites

Tu tens uma série de limites num ficheiro, e queres pedir ao utilizador que te dê uma cilindrada e identificar a taxa correspondente, certo?

Bom, primeiro aconselho-te a criares uma estrutura que te permita guardar as cilindradas e correspondentes taxas. Algo como:

typedef struct {
    double minima;
    double maxima;
    double taxa;
} Cilindrada;

Podes usar funções como o fgets() para leres do ficheiro, e a sscanf para extraíres os números. Depois, terás que ir guardando cada elemento. Se sabes quantos serão, podes usar um array simples, se não, talvez o melhor seja usares uma lista ligada.

Depois de teres essa lista/array com as cilindradas, basta pedires o nº ao utilizador e com um ciclo verificar cada elemento para ver se o número está dentro desse mínimo e máximo. Se estiver, já tens a taxa correspondente.

❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Link to comment
Share on other sites

Tens de fazer o parsing do ficheiro e guardar os valores de referência numa estrutura que a que o IceBrain indicou. Depois terias de aceder à estrutura para encontrar o valor que precisas. Basicamente, é a solução do IceBrain, agora tens é de fazer o código.

Link to comment
Share on other sites

Olá mais uma vez... 😛

ora, eu fiz o seguinte...pus:

if(stricmp(carro.tipo, "ligeiro") != 0){
	if(carro.cilindrada < 180)
		imposto.imposto_calculado = 0;
	else
		if(carro.cilindrada <= 750 || carro.cilindrada >= 180){
			fgets(ch_c,83, fp3);
			printf("%s\n", ch_c);
		}
}

o printf é apenas para controlar o que se encontra na string ch_c e nada tem a ver com o programa  😄

agora o novo problema...o fgets apenas armazena a primeira linha da tabela C (já postada mais acima) e não consigo fazer com que guarde tudo até ao fim do ficheiro...  ?

obrigado pelas ajudas anteriores.. 🙂 e pelas seguintes também se possível 😄

Link to comment
Share on other sites

Boa tarde,

eu fiz o seguinte:

while(n<2){		
			fgets(ch_c,30,fp3);
			n++;
			}
			sscanf(ch_c ,"%f", &imposto.imposto_calculado);
			printf("%s\n%f", ch_c, imposto.imposto_calculado);

mas ao fazer o printf do imposto.imposto_calculado aparece um número  -107374.00000 quando deveria aparecer o valor da taxa (51.30 ou 102.5)

alguma ajuda?? :wallbash:

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
 Share

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