Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

darkchrono

quanto a funcao feof();

Recommended Posts

#include <stdlib.h>
#include <stdio.h>

int main (){

FILE *aa;
int num;
aa= fopen("a.txt","rt");

while(feof(aa) == 0){
		 fscanf(aa,"%d",&num);
		 printf ("%d ",num);
}
	
fclose(aa);
system("pause");
return 0;
}

conteudo do arquivo a.txt:

123
10
111
20

_
no arquivo .txt nao tem esse " _ " nao... coloquei isso so para pular uma linha

obs: observe q depois do numero 20, pula uma linha....

 

esse é o problema, sempre quando eu pulo uma linha no final ou ponho um "espaço" no final

ele sempre imprime novamente o ultimo numero

 

olha o q ta imprimindo:

123 10 111 20 20 Pressione qualquer tecla para continuar. . .

 

 

como eu consertaria isso? sem ter q remover o espaço ou o pula linha no arquivo???

 

valeww

Compartilhar este post


Link para o post
Compartilhar em outros sites

pow valew... a sua solucao deu certo...

mas tipo, meu ingles é meio fraco... nao intendi algumas coisas do link que você passou... nos codigos 1 e 2, são soluçoes para nao dar esse tipo de erro USANDO a funcao feof(); ???? pq eu testei aqui e ainda continua o mesmo problema...

ja no terceiro codigo, da um loop infinito hehe

 

codigo 1:

 

while (!feof(st))
{
	if (fscanf(st,"%d",&buf) != NULL)
	{
		// process your buffer
		printf("%d",buf);
	}
}
fclose(st);

codigo 2:

 

while (!feof(st))
{
	if (fscanf(st,"%d",&buf) == NULL)
	{
		// exit the loop when done
		break;
	}
}
fclose(st);

codigo 3:

while (fscanf(st,"%d",&buf) != NULL)
{
	printf ("%d ",buf);
}

ps esses codigos sao do site que você passou, porem fiz algumas alteraçoes como trocar o fgets pelo fscanf e o puts pelo printf.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o EOF equivale ao -1 né??

 

mas tipo, se no meio do arquivo tiver um caractere '-1' ??

 

tipo assim:

 

int x = -1;

int a = 2;

 

fwrite(&x,sizeof(int),1,aa);

 

fwrite(&a,sizeof(int),1,aa);

 

eu to escrevendo no arquivo um caractere -1 e depois escrevendo o caractere 2, né?

 

mas como o EOF tem valor -1, ele nao vai indicar fim do arquivo antes de chegar no 2, por exemplo ?

 

como ficaria isso???

 

valeww

Compartilhar este post


Link para o post
Compartilhar em outros sites

O fscanf não retorna o que foi lido, ele retorna quantas variáveis foram atribuídas ou EOF caso tenha chegado no fim do arquivo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ah sim, mas olha so essa minha duvida:

FILE *aa;
aa = fopen("a.txt","rt");
int y;
int x=1;
fwrite(&x,sizeof(int),1,aa);
fseek(aa,1,SEEK_SET);

fscanf(aa,"%d",&y);//esse fscanf, ele nao lê o numero que foi escrito pelo fwrite?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.