Ir ao conteúdo
  • Cadastre-se
Estudante0123

C Escrevendo string em arquivo

Recommended Posts

Fiz um codigo para criar um arquivo, logo apos abrir espaço para que o usuario escreva nele. Roda tudo certinho, mas quando abro o arquivo, só fica gravado a primeira palavra até o primeiro espaço, depois não há mais nada. Alguem pode me ajudar? Obrigado

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

int main (){

// criando arquivo
FILE *pont_arquivo;
pont_arquivo = fopen ("arquivo.txt", "w");

//usuario cria o que vai escrever

char txt [500];
  printf ("Escreva no arquivo: ");
  scanf ("%s", &txt);

// inserindo string no arquivo e fechando arquivo

if (strcmp ("0", txt))
    fprintf (pont_arquivo, "%s", txt);
else printf ("Não funcionou");

fclose(pont_arquivo);

return 0;
}

 

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Estudante0123    ele escreve uma só palavra por que você não colocou um laço de repetição  para que se possa digitar várias palavras e quando quiser parar então terminar o programa .

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que você usou o especificador %s no scanf, esse especificador só lê até o primeiro caractere vazio (espaço, nova linha '\n', tabulação, caractere nulo '\0'), ou seja só vai ler a primeira palavra digitada.

 

Para ler tudo que for digitado use o especificador %[^\n].

 

O especificador %[ também é um especificador para ler strings, mas nele nós especificamos uma lista de caracteres que podem, ou que não podem ser capturados.

 

O ^ após o [ indica que vamos listar caracteres que não podem ser capturados.

 

E a seguir colocamos o único caractere que não poderá ser capturado, o caractere nova linha '\n', ou seja vai capturar qualquer outro caractere digitado até encontrar um caractere nova linha '\n', que é inserido no fim quando você aperta Enter após digitar algo no prompt.

 

Ficando assim:

scanf ("%500[^\n]", txt);

 

Note que por segurança também coloquei o número 500 após o %, que serve para indicar o número máximo de caracteres a serem capturados, para não estourar o tamanho do txt se digitar algo longo demais. (Serão capturados no máximo 499 caracteres pois é preciso armazenar o caractere nulo '\0' na última posição do vetor, para indicar o fim da string.)

  • Curtir 2
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@devair1010 Tentei fazer um laço de repetição mas ainda sim não funcionou. Estou errando no laço?

// inserindo string no arquivo e fechando arquivo

while (fgets (txt, sizeof txt, pont_arquivo) != NULL){
     fprintf (pont_arquivo, "%s", txt);
}
fclose(pont_arquivo);

 

adicionado 0 minutos depois

@isrnick Entendi, super funcionou desse jeito, Obrigado :)

  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×