Gormiti Posted December 2, 2012 at 08:37 AM Report #485391 Posted December 2, 2012 at 08:37 AM (edited) 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 December 2, 2012 at 10:03 AM by pmg Falta LP
HappyHippyHippo Posted December 2, 2012 at 09:54 AM Report #485394 Posted December 2, 2012 at 09:54 AM mas não tens nada para escrever a string ... usa o printf com o argumento %s IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
pmg Posted December 2, 2012 at 10:13 AM Report #485396 Posted December 2, 2012 at 10:13 AM 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!
Gormiti Posted December 2, 2012 at 10:16 AM Author Report #485397 Posted December 2, 2012 at 10:16 AM (edited) Vou tentar, obrigado Edited December 2, 2012 at 10:18 AM by Gormiti
pmg Posted December 2, 2012 at 10:44 AM Report #485400 Posted December 2, 2012 at 10:44 AM 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!
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now