Jump to content

Duvida: Ler e escrever strings para um ficheiro


Gormiti

Recommended Posts

Muito bom dia,

Este é o primeiro tópico que escrevo aqui no PAP. E a duvida é a seguinte: estou a tentar criar um programa para registar até 5 produtos, em que tenho de inserir, para cada um, um numero de referencia, uma quantidade, o preço, e a designação, que vão ficar guardados num ficheiro. E o problema está na designação. Já tentei varias formas, mas depois de escrever a string e fechar o programa a string não está escrita no ficheiro que criai.

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

struct produt
{
   char design[100];
   int num_ref, quant, preco;
};

int main()
{
   struct produt produtos[5];
   FILE *write;
   int cont=0;

   write = fopen("inventario.txt", "w");
   if(write == NULL){
            printf("Impossivel de abrir o ficheiro");
            getchar();
            exit(1);
   }


do{

if(cont>=5){
printf("\n\tNao pode registar mais produtos!");
break;
}
else{
printf("\n\tRegistar produto\n");
fprintf(write, "Produto %d\n", cont);

fprintf(write, "\tNumero referencia: ");
printf("\nInsira o numero de referencia do produto: ");
scanf("%d", &produtos[cont].num_ref);
fprintf(write, "%d\n", produtos[cont].num_ref);

fprintf(write, "\tQuantidade: ");
printf("\nInsira a quantidade existente: ");
scanf("%d", &produtos[cont].quant);
fprintf(write, "%d\n", produtos[cont].quant);

fprintf(write, "\tPreco: ");
printf("\nInsira o preco do produto: ");
scanf("%d", &produtos[cont].preco);
fprintf(write, "%d\n", produtos[cont].preco);

//inserir a string para a design

cont++;
   }
}while(cont>=5);

   fclose(write);
   getchar();getchar();
}

Aqui está o código.

Agradecia a ajuda para esta dúvida e para outro eventual erro que tenha cometido na construção do código.

Agradecimentos.

Edited by pmg
Falta LP
Link to comment
Share on other sites

Sugestão: imprime para o ficheiro uma linha completa em vez da identificação primeiro e o valor depois.

Tu tens

fprintf(write, "\tNumero referencia: ");
printf("\nInsira o numero de referencia do produto: ");
scanf("%d", &produtos[cont].num_ref);
fprintf(write, "%d\n", produtos[cont].num_ref);

Eu sugiro

printf("\nInsira o numero de referencia do produto: ");
scanf("%d", &produtos[cont].num_ref);
fprintf(write, "\tNumero referencia: %d\n", produtos[cont].num_ref);

Para leres uma string do teclado para uma variável do programa, usa a função fgets(). Atenção que o valor resultante da função contem o <ENTER>: podes aproveitá-lo para imprimir no ficheiro (ou ecra), mas o melhor seria remover o <ENTER> da string.

//inserir a string para a design
// usar fgets
// remover <ENTER>
// escrever no ficheiro
fprintf(write, "\tDesignacao: %s\n", produtos[cont].design);

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Ah ... vais encontrar um problemazito ...

O ultimo scanf() antes da introdução da designação deixou um <ENTER> pendurado no buffer de input. O fgets() vai ler esse <ENTER> e mais nada, deixando-te com uma designação em branco.

Solução melhor: usa sempre fgets() para ler do teclado para uma string, depois, se necessário, usa sscanf() ou strtol() ou strtod() ... para ler dessa string para variáveis de tipo int ou double ou ...

Solução intermédia: antes do fgets() remove todos os caracteres do buffer de input até (inclusve) o <ENTER>

Solução fraca: usa um scanf() com uma conversão de whitespace para remover o <ENTER>.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
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.