Ir ao conteúdo
  • Cadastre-se

C CRUD em C - Argumento inválido


Ir à solução Resolvido por devair1010,

Posts recomendados

Opa, boa tarde a todos, poderiam me ajudar?
Estou com um erro na linha 173 e 175, mas não consigo chegar em uma lógica para resolve-lo

Código completo:
 

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <locale.h>
#include <ctype.h>
#include <windows.h>
 
struct produto{
	char nome[30];
	int diaValidade;
	int mesValidade;
	int codigoProduto;
	float precoProduto;
};
 
int exibirMenu(void);
void inserirProduto(void);
void verificarProduto(void);
void atualizarPreco(void);
void excluirproduto(void);
 
int main(void){
	setlocale(LC_ALL,"");
	int opcao;
 
	do{
		opcao = exibirMenu();
 	 	 
		switch (opcao){
			case 1:
				inserirProduto();
			break;
			case 2:
				verificarProduto();
			break;
			case 3:
				atualizarPreco();
			break;
			case 4:
				excluirproduto();
			break;
			case 0:
				printf("\nPrograma encerrado...");
			break;
			default:
				printf("\n Opção inválida!");
    	}
    	Sleep(1000); // Serve para parar o programa durante 1 segundo.
	} while(opcao != 0);
 
  return 0;
}
 
int exibirMenu(void){
	int opcao;
 
	system("cls");
 
	printf("|\t| MENU |\t|\n|\n");
	 printf("| 1 | Inserir produto\n");
	 printf("| 2 | Verificar produto\n");
	 printf("| 2 | Listar produto\n");
	 printf("| 3 | Alterar precos\n");
	 printf("| 4 | Remover produto\n");
	 printf("| 0 | Sair\n\n");
	printf(" Digite a opcao desejada: ");
	 scanf("%d", &opcao);
 
	return opcao;
}
 
void inserirProduto(void){
	struct produto produtoSalvo;
	FILE *arquivo;
	system("cls");
 
	printf("\tHBS | Inserir Produto\n\n");
	printf("Nome: ");
	 fflush(stdin); // limpar o buffer de saída do teclado //
	 gets(produtoSalvo.nome);
	printf("Código: ");
	 scanf("%d", &produtoSalvo.codigoProduto);
	printf("Dia da validade: ");
	 scanf("%d", &produtoSalvo.diaValidade);
	printf("Mês da validade: ");
	 scanf("%d", &produtoSalvo.mesValidade);
	printf("Preço: ");
	 scanf("%f", &produtoSalvo.precoProduto);
 
	arquivo = fopen("listaProdutos.dat", "ab");
	
	if (!arquivo){
		arquivo = fopen("produto.dat", "wb");
	}
 
	fwrite(&produtoSalvo, 1, sizeof(struct produto), arquivo);
	fclose(arquivo);
}
 
void verificarProduto(void){
	int encontrado = 0;
	char busca[30];
	struct produto produtoSalvo;
	
	FILE *arquivo;
	system("cls");
 
	printf("\tHBS | Lista de Produtos\n\n");
	 printf(" Nome do produto: ");
	  fflush(stdin);
	  gets(busca);
 
	 arquivo = fopen("listaProdutos.dat", "rb");
 
	if (arquivo){
    	fread(&produtoSalvo, 1, sizeof(struct produto), arquivo);
    	while (!feof(arquivo)){
			if (strcmp(busca, produtoSalvo.nome) == 0){
				printf("\nNome: %s\n", produtoSalvo.nome);
				printf("\nCódigo: %d\n", produtoSalvo.codigoProduto);
				printf("Data de validade: %d / %d\n", produtoSalvo.diaValidade, produtoSalvo.mesValidade);
				printf("Preço: %f", produtoSalvo.precoProduto);
				Sleep(2000); // Serve para parar o programa durante 2 segundos.
				encontrado = 1;
				
				break;
			}
			fread(&produtoSalvo, 1, sizeof(struct produto), arquivo);
		}
 
		if (!encontrado){
			printf("\nO produto não foi encontrado!");
			Sleep(1000);
		}
		fclose(arquivo);
	} else{
		printf("\n Nada encontrado no arquivo!");
		Sleep(1000);
	}
}
 
void atualizarPreco(void){
	int encontrado = 0;
	int codigoProduto;
	float precoProduto;
	struct produto produtoTemporario;
	struct produto produtoSalvo;
	
	FILE *arquivoAntigo = NULL, *arquivoAtualizado = NULL;
	system("cls");
 
	printf("\tHBS | Alterar informações\n\n");
	printf("Novo código: ");
	 scanf("%d", &produtoSalvo.codigoProduto);
	printf("Novo preço: ");
	 scanf("%f", &produtoSalvo.precoProduto);
 
  arquivoAntigo = fopen("listaProdutos.dat", "rb");
  if (arquivoAntigo)
  {
    arquivoAtualizado = fopen("temp.dat", "wb");
    if (!arquivoAtualizado)
    {
      printf("\n Falha na alteração do produto!");
      Sleep(1000);
      return;
    }
 
    fread(&produtoTemporario, 1, sizeof(struct produto), arquivoAntigo);
    while (!feof(arquivoAntigo))
    {
      if (strcmp(produtoTemporario.codigoProduto, codigoProduto) == 0)
      {
        strcpy(produtoTemporario.precoProduto, precoProduto);
        encontrado = 1;
      }
      fwrite(&produtoTemporario, 1, sizeof(struct produto), arquivoAtualizado);
      fread(&produtoTemporario, 1, sizeof(struct produto), arquivoAntigo);
    }
 
    fclose(arquivoAntigo);
    fclose(arquivoAtualizado);
 
    remove("listaProdutos.dat");
    rename("temp.dat", "listaProdutos.dat");
 
    if (!encontrado)
    {
      printf("\nNão foi possível encontrar o produto...");
    }
    else
    {
      printf("\nA alteração foi concluída!");
    }
 
    Sleep(1000);
  }
  else
  {
    printf("\nNenhum produto foi encontrado!");
    Sleep(1000);
  }
}
 
void excluirproduto(void)
{
  int encontrado = 0;
  char nome[30];
  struct produto produtoTemporario;
  FILE *arquivoAntigo = NULL, *arquivoAtualizado = NULL;
 
  system("cls");
 
  printf("\tAGENDA TELEFONICA - EXCLUIR precoProduto\n\n");
  printf(" Nome do produto: ");
  fflush(stdin);
  gets(nome);
 
  arquivoAntigo = fopen("listaProdutos.dat", "rb");
  if (arquivoAntigo)
  {
    arquivoAtualizado = fopen("temp.dat", "wb");
    if (!arquivoAtualizado)
    {
      printf("\nFalha ao excluir produto!");
      fclose(arquivoAntigo);
      Sleep(1000);
      return;
    }
 
    fread(&produtoTemporario, 1, sizeof(struct produto), arquivoAntigo);
    while (!feof(arquivoAntigo))
    {
      if (strcmp(produtoTemporario.nome, nome) == 0)
      {
        encontrado = 1;
      }
      else
      {
        fwrite(&produtoTemporario, 1, sizeof(struct produto), arquivoAtualizado);
      }
      fread(&produtoTemporario, 1, sizeof(struct produto), arquivoAntigo);
    }
 
    fclose(arquivoAntigo);
    fclose(arquivoAtualizado);
 
    remove("listaProdutos.dat");
    rename("temp.dat", "listaProdutos.dat");
 
    if (!encontrado)
    {
      printf("\nNão foi possível encontrar o produto...");
    }
    else
    {
      printf("\nExclusão realizada com sucesso!");
    }
 
    Sleep(1000);
  }
  else
  {
    printf("\nNenhum produto encontrado!");
    Sleep(1000);
  }
}

 

Link para o comentário
Compartilhar em outros sites

  • Solução

@Pedro Torres D   essa parte aqui

if (strcmp(produtoTemporario.codigoProduto, codigoProduto) == 0)
{
    strcpy(produtoTemporario.precoProduto, precoProduto);
    encontrado = 1;
}

poderia ser assim  :
if (strcmp(produtoTemporario.codigoProduto, codigoProduto) == 0)
{
    produtoTemporario.precoProduto = precoProduto;  // adição de número
    encontrado = 1;
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Pedro Torres D Se tratando de float ou int, não precisa de função...

Usamos strcmp() e strcpy() se tratando de strings, um vetor de char terminado em '\0' (caractere nulo).

Veja:

if (produtoTemporario.codigoProduto == codigoProduto)
{
    produtoTemporario.precoProduto = precoProduto;
    encontrado = 1;
}
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!