Jump to content
Tiago Coelho

Problemas com fscanf

Recommended Posts

Tiago Coelho

Boas , sou iniciante em c , deparei me com o seguinte problema , quando abro o programa ele nao chega a proceder todo e fecha , isto começou a acontecer devido ao fscanf que tentei inserir , que eu próprio admito que esta parte de criaçao e leitura de arquivos é uma matéria bastante nova , agradeço a vossa paciência .

#include<stdio.h>
main()
{
 char nome [20] , nome1[20] , result;
 char sexo , cond ;
 short int idade , contar ,fem=0 , mas=0;
 float mesada,soma,media;
 contar=0;
 soma=0;
 FILE * pfile ;



  do
  {
			 printf("Nome:\n") ;
			 scanf("%s" , nome);
			 printf("Idade :\n");
			 scanf("%i", &idade);
			 printf("Sexo f /m :\n");
	   fflush(stdin);
			 scanf("%c", &sexo);

 sexo=toupper(sexo);

 contar= contar++;

		 printf("Mesada:\n");
		 scanf("%f", &mesada);

  soma=mesada+soma;
  media=soma/contar;

		  pfile=fopen ("dados.txt" ,"a");
		  fprintf(pfile , "\n\n\n|Nome:%s|\n---------------" ,nome );
		  fprintf(pfile , "\n|Idade:%i|\n-----------" ,idade );
		  fprintf(pfile , "\n|Sexo:%c|\n---------" ,sexo );
		  fprintf(pfile , "\n|Mesada%.2f|\n---------" ,mesada );
		  fprintf(pfile , "\n|numero de usuarios:%i|\n---------------" ,contar );
		  fprintf(pfile , "\n|total de mesadas :%.2f|\n--------------" ,soma );
		  fprintf(pfile , "\n| media de mesadas :%.2f|\n--------------" ,media );
		  fprintf(pfile , "\n| teste :%s|\n--------------" ,nome1 );


  pfile=fopen ("dados.txt" ,"r");
  result=fscanf( pfile, "%s" , &nome );
   printf("%s" , result);

  fclose(pfile);
  switch(sexo)

  {
	 case 'F':
	fem=fem+1;	
  printf("A %s , tem %i anos  e recebe %.2f de mesada \nJa contamos com usuarios: %i \nDo sexo masculino :%i \t Do sexo femenino :%i  \nSoma de mesadas ate agora: %.2f  \nMedia de mesadas: %.2f " , nome , idade , mesada , contar , mas , fem , soma , media );
 break;



  case'M':
	mas=mas+1;
  printf("O %s , tem %i anos  e recebe %.2f de mesada \nJa contamos com usuarios: %i \nDo sexo masculino :%i \t Do sexo femenino :%i  \nSoma de mesadas ate agora: %.2f  \nMedia de mesadas: %.2f " , nome , idade , mesada , contar , mas , fem , soma , media );
 break;
 }		
 printf("\nQuer continuar ? s /n \n");
 fflush(stdin);
 scanf("%c", &cond);

 system("cls");

 }		  
 while(cond=='s');

  getch();
  }

Edited by Tiago Coelho

Share this post


Link to post
Share on other sites
Tiago Coelho

Ate a mesada

#include<stdio.h>
main()
{
	 char nome [20] , nome1[20] , result;
	 char sexo , cond ;
	 short int idade , contar ,fem=0 , mas=0;
	 float mesada,soma,media;
	 contar=0;
	 soma=0;
	 FILE * pfile ;



	  do
	  {
							 printf("Nome:\n") ;
							 scanf("%s" , nome);
							 printf("Idade :\n");
							 scanf("%i", &idade);
							 printf("Sexo f /m :\n");
			   fflush(stdin);
							 scanf("%c", &sexo);

	 sexo=toupper(sexo);

	 contar= contar++;

					 printf("Mesada:\n");
					 scanf("%f", &mesada);

Share this post


Link to post
Share on other sites
HappyHippyHippo

isso não me diz nada ...

até que linha é que consegues perceber que a aplicação está a ser executada ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Tiago Coelho

O programa ta a fazer ate aqui :

#include<stdio.h>
main()
{
 char nome [20] , nome1[20] , result;
 char sexo , cond ;
 short int idade , contar ,fem=0 , mas=0;
 float mesada,soma,media;
 contar=0;
 soma=0;
 FILE * pfile ;



  do
  {
			 printf("Nome:\n") ;
			 scanf("%s" , nome);
			 printf("Idade :\n");
			 scanf("%i", &idade);
			 printf("Sexo f /m :\n");
	   fflush(stdin);
			 scanf("%c", &sexo);

 sexo=toupper(sexo);

 contar= contar++;

		 printf("Mesada:\n");
		 scanf("%f", &mesada);

  soma=mesada+soma;
  media=soma/contar;

		  pfile=fopen ("dados.txt" ,"a");
		  fprintf(pfile , "\n\n\n|Nome:%s|\n---------------" ,nome );
		  fprintf(pfile , "\n|Idade:%i|\n-----------" ,idade );
		  fprintf(pfile , "\n|Sexo:%c|\n---------" ,sexo );
		  fprintf(pfile , "\n|Mesada%.2f|\n---------" ,mesada );
		  fprintf(pfile , "\n|numero de usuarios:%i|\n---------------" ,contar );
		  fprintf(pfile , "\n|total de mesadas :%.2f|\n--------------" ,soma );
		  fprintf(pfile , "\n| media de mesadas :%.2f|\n--------------" ,media );
		  fprintf(pfile , "\n| teste :%s|\n--------------" ,nome1 );

fecha antes de executar esta parte do código :

pfile=fopen ("dados.txt" ,"r");
  result=fscanf( pfile, "%s" , &nome );
   printf("%s" , result);

  fclose(pfile);
  switch(sexo)

  {
	 case 'F':
	fem=fem+1;	
  printf("A %s , tem %i anos  e recebe %.2f de mesada \nJa contamos com usuarios: %i \nDo sexo masculino :%i \t Do sexo femenino :%i  \nSoma de mesadas ate agora: %.2f  \nMedia de mesadas: %.2f " , nome , idade , mesada , contar , mas , fem , soma , media );
 break;



  case'M':
	mas=mas+1;
  printf("O %s , tem %i anos  e recebe %.2f de mesada \nJa contamos com usuarios: %i \nDo sexo masculino :%i \t Do sexo femenino :%i  \nSoma de mesadas ate agora: %.2f  \nMedia de mesadas: %.2f " , nome , idade , mesada , contar , mas , fem , soma , media );
 break;
 }		
 printf("\nQuer continuar ? s /n \n");
 fflush(stdin);
 scanf("%c", &cond);

 system("cls");

 }		  
 while(cond=='s');

  getch();
  }

Edited by Tiago Coelho

Share this post


Link to post
Share on other sites
HappyHippyHippo

pfile=fopen ("dados.txt" ,"a"); // abriste o ficheiro
// ...                        

pfile=fopen ("dados.txt" ,"r"); // não podes abrir um ficheiro que já se encontra aberto
result=fscanf( pfile, "%s" , &nome ); // pfile tem agora o valor de NULL, o que irá causar que o fscanf estoire

2 regras de ouro no que toca a manipulação de ficheiros:

- fecha sempre um ficheiro imediatamente após deixares de necessitar de manipular o ficheiro

- verificar sempre o resultado de abertura do ficheiro >> sempre

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
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

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