Lendo arquivo em C [RESOLVIDO]

1. Lendo arquivo em C [RESOLVIDO]

Eden Ricardo Dosciatti
edenrd

(usa Ubuntu)

Enviado em 14/01/2010 - 17:29h

Bem, estou com um problema para resolver em C. Tenho um arquivo com 5000 linhas, cada linha tem um número que preciso ler e guardar em um vetor para fazer comparações.
O arquivo é:
0
35
100
145
147
148

e assim por diante, contendo as 5000 linhas.

Não estou conseguindo guardar esse valor em um vetor para comparar com outros valores, consigo ler o arquivo e imprimir na tela, mas o valor lido não é o valor referente ao número que está no arquivo. Alguém poderia me ajudar????? Gracias.


  


2. MELHOR RESPOSTA

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 15/01/2010 - 16:08h

Bem, se você quer ler todos os valores então aconselho você a utilizar outra forma para iterar
dentro do arquivo.

Você utilizou um for e vai ler enquanto i < TEMPO.
Se o arquivo tem exatamente TEMPO linhas então a leitura será completa.
Se não, você não lerá o arquivo todo (ou tentará ler mais linhas de um arquivo que tem nenos que TEMPO linhas).

Utilize a função feof() para funcionar de modo geral:

int valor ;
while( ! feof(p) ) {
fscanf(p,"%d",&valor) ;

if ( valor == 999 ) { // se valor e' igual a 999
...
...
}

}

Veja o teste do if: o if vai testar se o valor lido, que está na variável valor,
é igual a 999 (você pode testar os valores desse jeito)

Para armazenar em um vetor que nem você tava querendo, é so trocar a variável valor por
vetor[i].

int vetor[100] ;
int i = 0;

while( ! feof(p) ) {
fscanf(p,"%d",&vetor[i]) ;

if ( vetor[i] == 999 ) { // se valor e' igual a 999
...
...
}
i++ ;
}

Agora todos os números do arquivo está no vetor de nome vetor. Você pode utilizar seus valores
em qualquer parte de seu programa para comparar, imprimir, etc

Abraços

3. Re: Lendo arquivo em C [RESOLVIDO]

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 14/01/2010 - 18:10h

Fala edenrd,

Com que função você está lendo do arquivo? Se você consegue mostrar o valor na tela então nada impede
você de armazená-lo em um vetor.

Para ler os números você pode usar a função fgets (e depois converter) ou a fscanf com o parâmetro "%d".

Acho que é isso! Se você colar o seu código ae, ficaria melhor visualizar onde está o problema.

Abraços


4. Re: Lendo arquivo em C [RESOLVIDO]

Eden Ricardo Dosciatti
edenrd

(usa Ubuntu)

Enviado em 14/01/2010 - 21:28h

O código que uso para ler e escrever na tela o arquivo é este abaixo. Porém, como faço para utilizar o valor lido para comparar um com o outro?

#include <stdio.h>
#define TEMPO 26

main(){
FILE *p;
char a[1];
int i;
p = fopen("teste1.txt","r");
for (i=1;i<TEMPO;i++)
{
fscanf(p,"%s",&a);
printf("%s\n",a);
}
fclose(p);

}

o arquivo teste1.txt contem:

0
35
68
101
134
168
201
234
267
300
334
367
402
435
468
500
535
568
601
634
668
668
701
734
767

e eu preciso desses valores para comparar com outra parte do programa.

Obrigado e no aguardo.

edenrd


5. Agradecimento

Eden Ricardo Dosciatti
edenrd

(usa Ubuntu)

Enviado em 21/01/2010 - 13:41h

Obrigado pela ajuda, problema resolvido.
Eden


6. Re: Lendo arquivo em C [RESOLVIDO]

Luis Felipe Amaral de Oliveira
lfelipeamaral

(usa Outra)

Enviado em 26/10/2014 - 15:15h

Utilizei o programa do cara ali de cima, fico assim:


int main(){
FILE *p;
int v[MAX]; // já que tu disse ser 5000
int t, i;

p = fopen("arquivo.txt","r");
if (p == NULL) { // Sempre, sempre sempre teste se abriu mesmo
fprintf(stderr, "nao deu para abrir arquivo\n");
return(1);
}

for (i=0;i<MAX;i++)
{
fscanf(p,"%d",&v);
if (feof(p)){
/* Ops. Chegou ao final do arquivo antes dos 5000! */
break; // sai do laco sem incrementar o i
}
}
t = i;
fclose(p);
printf("lido %d inteiros no arquivo\n", t);
// imprimindo os inteiros lidos
for (i = 0; i < t; i++){
printf("vet[%d] = %d\n", i, v);
}

So que na hora de imprimir aparece uns numeros estranhos, não sei como resolvo isso


7. Re: Lendo arquivo em C [RESOLVIDO]

Isaac
ibraga

(usa Outra)

Enviado em 10/02/2015 - 13:07h

lfelipeamaral escreveu:

Utilizei o programa do cara ali de cima, fico assim:


int main(){
FILE *p;
int v[MAX]; // já que tu disse ser 5000
int t, i;

p = fopen("arquivo.txt","r");
if (p == NULL) { // Sempre, sempre sempre teste se abriu mesmo
fprintf(stderr, "nao deu para abrir arquivo\n");
return(1);
}

for (i=0;i<MAX;i++)
{
fscanf(p,"%d",&v);
if (feof(p)){
/* Ops. Chegou ao final do arquivo antes dos 5000! */
break; // sai do laco sem incrementar o i
}
}
t = i;
fclose(p);
printf("lido %d inteiros no arquivo\n", t);
// imprimindo os inteiros lidos
for (i = 0; i < t; i++){
printf("vet[%d] = %d\n", i, v);
}

So que na hora de imprimir aparece uns numeros estranhos, não sei como resolvo isso



Esse números estranhos ocorrem por conta de você estar lendo um char e passando para o inteiro, você precisa transformar o valor para poder imprimir o numero corretamente. Da uma pesquisada sobre atoi e atof!!!










Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts