Olá, eu só tenho perto de um ano de aprendizagem de c e gostaria de saber o que estou a fazer mal para o meu programa ficar assim.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
struct produto
{
int codigo;
char nome[20];
char marca[20];
float preco;
};
void inserir(struct produto stock[], int *quant, int inserirP);
void guardar(struct produto stock[], int *quant);
void ler(struct produto stock[], int *quant);
void listar(struct produto stock[], int *quant);
int main()
{
setlocale(LC_ALL, "portuguese");
struct produto stock[100];
int quantid, opcao, inserirP;
ler(stock, &quantid);
printf("----------\n0 - Sair\n1 - Inserir Produto\n2 - Listar Produto\n----------\n\n");
do
{
printf("Insira uma opção: ");
scanf("%d", &opcao);
if(opcao == 1)
{
printf("Insira a quantidade de produtos que deseja inserir: ");
scanf("%d", &inserirP);
inserir(stock, &quantid, inserirP);
guardar(stock, &quantid);
}
else
{
if(opcao == 2)
listar(stock, &quantid);
else
{
if(opcao == 0)
printf("Saiu com sucesso.");
else
printf("A opção que inseriu não existe.");
}
}
}while(opcao != 0);
return 0;
}
void inserir(struct produto stock[], int *quant, int inserirP)
{
int i, j;
i = *quant + inserirP;
for(j = *quant; j < i; j++)
{
printf("Insira o código do produto: ");
scanf("%d", &stock[*quant].codigo);
fflush(stdin);
printf("Insira o nome do produto: ");
scanf("%[^\n]s", stock[*quant].nome);
fflush(stdin);
printf("Insira a marca do produto: ");
scanf("%[^\n]s", stock[*quant].marca);
fflush(stdin);
printf("Insira o preço do produto: ");
scanf("%f", &stock[*quant].preco);
fflush(stdin);
}
}
void guardar(struct produto stock[], int *quant)
{
int i = 0;
FILE *filer;
filer = fopen("stock.txt", "w+");
while(i < *quant)
{
fprintf(filer, "%d %s %s %2.f", stock[i].codigo, stock[i].nome, stock[i].marca, stock[i].preco);
i++;
}
fclose(filer);
}
void listar(struct produto stock[], int *quant)
{
int i;
for(i = 0; i < *quant; i++)
{
printf("Código: %d\n", stock[i].codigo);
printf("Nome: %s\n", stock[i].nome);
printf("Marca: %s\n", stock[i].marca);
printf("Preço: %.2f\n", stock[i].preco);
}
}
void ler(struct produto stock[], int *quant)
{
int camposLido = 0, i = 0;
FILE* filler;
filler = fopen("stock.txt", "a");
while ((camposLido = fscanf(filler, "%d %s %s %f", &stock[i].codigo, stock[i].nome, stock[i].marca, &stock[i].preco)) != EOF)
{
if (camposLido != 4)
{
fprintf(stderr, "Linha desformatada\n");
fscanf(filler, "%*[^\n]s");
fscanf(filler, "%*c");
}
i++;
}
fclose(filler);
}
Depois ele fica assim e eu não percebo porquê.