Ir ao conteúdo

C CRUD em C - Argumento inválido


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

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);
  }
}

 

  • Solução
Postado

@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
Postado

@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

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...