Ir para conteúdo

POWERED BY:

Arquivado

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

serginho_pv

Erro ao gravar txt

Recommended Posts

Se eu digitar somente uma palavra e finalizar, o arquivo é gravado corretamente. Mas, se eu digitar mais de uma palavra, o arquivo fica ilegível.

:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {		
		char texto[10];
		} palavra;

main()
{ int exec=0;
  char resposta;
  palavra PAL;
  FILE *arq;
  arq = fopen("palavras.txt","a");
  printf("Cadastro de Palavras - Jogo da Memoria\n");
  while (exec==0)
  { printf("\nDigite uma palavra: "); scanf("%s", &(PAL.texto)); fflush(stdin);
	fwrite(&PAL,sizeof(palavra),1,arq);
	printf("\nFINALIZAR A DIGITACAO (s/n)"); scanf("%s", &resposta);
	if(resposta == 's')
	{ exec=1;
	  fclose(arq);
	}
  }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim

 

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

int main()
{
  char resposta;
  char palavra[10];
  FILE *arq;
  arq = fopen("palavras.txt","a");
  if (arq == NULL) exit(1);
  printf("Cadastro de Palavras - Jogo da Memoria\n");
  while (true){
	printf("\nDigite uma palavra: ");
	scanf("%s%*c", &palavra);
	fputs(palavra,arq);
	fprintf(arq, "\n");
	printf("\nFINALIZAR A DIGITACAO (s/n)");
	scanf("%c%*c", &resposta);
	if(resposta == 's') break;
  }
  fclose(arq);
  return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

De um exemplo de input/output.

 

Se você digita mais de uma palavra no mesmo input, tipo "azul amarelo"??

Se você digita duas palavras em inputs diferentes, tipo "azul", enter, "amarelo"??

 

O primeiro caso não vai funcionar nem com reza braba...

 

NÃO USE FFLUSH(STDIN)

http://forum.imasters.com.br/index.php?showtopic=336835

 

Pois é, o quitZAUMMM matou a pau o problema, é sujeira de buffer.

De uma lida no código dele e no link que te mandei. Boa sorte.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um detalhe: apesar de a struct ser desnecessária nesse exemplo, você estava passando para fwrite o endereço da struct, não da string contida nela. É bom tomar cuidado com isso. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

no código q coloquei eu nem uso fwrite pq desdo começo aprendi usando fprintf e fputs e sempre achei + facil ;D

naum cheguei a testar + sera q eles tem alguma diferença?? nunca me foquei tanto em manipulação de arquivos.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

no código q coloquei eu nem uso fwrite pq desdo começo aprendi usando fprintf e fputs e sempre achei + facil ;D

naum cheguei a testar + sera q eles tem alguma diferença?? nunca me foquei tanto em manipulação de arquivos.

 

[]s

fwrite é pra quando você quer escrever dados que não sejam strings, como por exemplo uma struct. :D

Claro, os dados da struct quando são convertidos pra texto no Notepad geralmente vira aquela porcalhera toda, portanto geralmente esse tipo de dado em um arquivo é para ser manipulado apenas pelo programa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

fwrite é pra quando você quer escrever dados que não sejam strings, como por exemplo uma struct.

Não necessáriamente...

fwrite é usado para escrever dados binários em um arquivo. Sejam eles strings, floats ou bools...

Compartilhar este post


Link para o post
Compartilhar em outros sites

fwrite é pra quando você quer escrever dados que não sejam strings, como por exemplo uma struct.

Não necessáriamente...

fwrite é usado para escrever dados binários em um arquivo. Sejam eles strings, floats ou bools...

É, mas eu tenho o vício de gravar tudo com fwrite, ou qualquer função parecida que peça um ponteiro void e o tamanho de bytes a serem gravados para satisfazer essa minha tara. XD

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.