I can not save the string

-1
void ex51(char *nome_ficheiro){//escrever e criar um ficheiro novo.
  char frase[100]; 
  printf("Introduza o texto que quer escrever neste ficheiro:\n"); 
  scanf("%s",frase);
  FILE *fp=fopen(nome_ficheiro,"w");
  if(fp==NULL){
      printf("Error!!!\n");
  }else{ 
      fprintf(fp,"%s",frase); 
  }
 fclose(fp);
}

Whenever I give space or enter it only saves the first word, I tried to use gets () to solve the problem, but gets () does not work, it makes the program finish soon.

    
asked by anonymous 27.12.2016 / 15:21

2 answers

4

The scanf has a format for reading characters, so it reads everything typed up to a specific value.

scanf("%[^\n]", var); // irá ler tudo que estiver antes do \n (quebra de linha)

Since your String has a fixed size, you can use a constant to indicate the maximum size you want to read.

scanf("%100[^\n], var); // irá ler os antes de \n com um limite de 100

Or you can directly use character reading, but I do not recommend it.

scanf("%100c", var); // lê os caracteres até um limite de 100
void ex51(char *nome_ficheiro){
  char frase[100]; 
  printf("Introduza o texto que quer escrever neste ficheiro:\n"); 

  scanf("%100[^\n]",frase); // faz a leitura da linha

  FILE *fp=fopen(nome_ficheiro,"w");
  if(fp==NULL){
      printf("Error!!!\n");
  }else{ 
      fprintf(fp,"%s",frase); 
  }
 fclose(fp);
}

Example

    
27.12.2016 / 17:10
2

Use fgets to read a line. Do not use gets , it's a reason to quit for just cause.

#include <stdio.h>

void ex51(char *nome_ficheiro)
{
   char frase[100];
   printf("Introduza o texto que quer escrever neste ficheiro:\n"); 

   if (fgets(frase, 100, stdin) == NULL)
   {
      printf("erro,nao foi possivel ler o texto");
     return;
   }

   FILE* fp=fopen(nome_ficheiro,"w");
   if (fp == NULL)
   {
      printf("Error!!!\n");
   }
   else
   {
      fprintf(fp,"%s",frase);
   }

   fclose(fp);
}

int main()
{
   ex51("xxx");
}
    
27.12.2016 / 16:24