Ir ao conteúdo

Posts recomendados

Postado
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100

struct cadastra{
    int codigop,codigof,quantidade;
    char nome[30];
    char fornecedor[30];
    float preco;
};

struct cadastra cad[MAX];
int quantp=0;

void cadastraProduto(struct cadastra produto){
    cad[quantp]=produto;
    quantp++;
}


struct cadastra leDados(){
    struct cadastra auxiliar;
    srand(time (NULL));
    fflush(stdin);
    printf("Digite o nome do produto\n");
    scanf("%s",auxiliar.nome);
    auxiliar.codigop = 1 + rand()%100;
    printf("Codigo do produto %d\n",auxiliar.codigop);
    fflush(stdin);
    printf("Quantide de produtos para o estoque\n");
    scanf("%d",&auxiliar.quantidade);
    fflush(stdin);
    printf("Nome do fornecedor\n");
    scanf("%s",auxiliar.fornecedor);
    auxiliar.codigof = 1 + rand()%100;
    printf("Codigo do fornecedor %s eh %d\n",auxiliar.fornecedor, auxiliar.codigof);
    fflush(stdin);
    printf("Digite o preco do produto\n");
    scanf("%f",&auxiliar.preco);
    fflush(stdin);
    system("CLS");
return auxiliar;
}
void buscar(){
    int i,opica;
    char nome[30];
        do{
            printf("MENU DE BUSCA\n");
            printf("1- Mostrar lista de produtos\n");
            printf("2- Buscar pelo nome produto ou pelo nome do fornecedor\n");;
            printf("3- Sair do menu busca\n");
            printf("Digite o numero da opicao desejada \n");
            scanf("%d",&opica);
            system("CLS");
            switch(opica){
                case 1:
                    printf("Lista de produtos cadastrados\n");
                    for(i=0;i<quantp;i++){
                        printf("Produto %d \n",i+1);
                        printf("+++++++++++++++++++++++\n");
                        printf("Nome do produto:       %s\n",cad[i].nome);
                        printf("Codigo do produto:     %d\n",cad[i].codigop);
                        printf("Quantidade no estoque: %d\n",cad[i].quantidade);
                        printf("Nome do fornecedor:    %s\n",cad[i].fornecedor);
                        printf("Codigo do fornecedor:  %d\n",cad[i].codigof);
                        printf("Preço do produto:      %.2f\n",cad[i].preco);
                        printf("+++++++++++++++++++++++\n");
                    }
                    break;
                case 2:
                    printf("Digite o nome do produto ou nome do fornecedor\n");
                    scanf("%s",&nome);
                    for(i=0;i<quantp;i++){
                        if((strcmp (nome, cad[i].nome) == 0) || strcmp (nome, cad[i].fornecedor) == 0) {
                            printf("+++++++++++++++++++++++\n");
                            printf("Nome do produto:       %s\n",cad[i].nome);
                            printf("Codigo do produto:     %d\n",cad[i].codigop);
                            printf("Quantidade no estoque: %d\n",cad[i].quantidade);
                            printf("Nome do fornecedor:    %s\n",cad[i].fornecedor);
                            printf("Codigo do fornecedor:  %d\n",cad[i].codigof);
                            printf("Preço do produto:      %.2f\n",cad[i].preco);
                            printf("+++++++++++++++++++++++\n");
                        }
                    }
                    break;
                case 3:
                    break;
            }
        }while(opica!=3);
        system("CLS");
}
void alterar (){
    int i;
    char nome[30];
    fflush(stdin);
    printf("Digite o nome do produto que deseja alterar: ");
    scanf("%s",&nome);
    for(i=0;i<quantp;i++){
        if(strcmp (nome, cad[i].nome) == 0){
            fflush(stdin);
            printf("Digite o nome do produto\n");
            scanf("%s",&cad[i].nome);
            cad[i].codigop = 1 + rand()%10;
            printf("Codigo do produto %d\n",cad[i].codigop);
            fflush(stdin);
            printf("Quantide de produtos para o estoque\n");
            scanf("%d",&cad[i].quantidade);
            fflush(stdin);
            printf("Nome do fornecedor\n");
            scanf("%s",&cad[i].fornecedor);
            cad[i].codigof = 1 + rand()%10;
            printf("Codigo do fornecedor %s eh %d\n",cad[i].fornecedor, cad[i].codigof);
            fflush(stdin);
            printf("Digite o preço do produto\n");
            scanf("%f",&cad[i].preco);
            fflush(stdin);
        }
    }
    system("CLS");
}
void remover () {    			// Função remover
	int i,cont=0;
	int codigo_busc;
	printf("veja numero do produto que você deseja remover\n");
	buscar();                   // Chama a função listar para que seja visto qual codigo relacionado ao produto
	printf("Informe o Codigo do Produto que se Deseja Excluir: "); // Pede o codigo para busca
	scanf("%i",&codigo_busc);
	for(i = 0 ; i < quantp ; i++){

		if (cad[i].codigop == codigo_busc) {  // Compara o codigo relacionado e exclui

			cad[i] = cad[i+1];                // Realoca a Memória

            quantp--;                         // decrementa o indice do vetor para que ocupe o cadastro removido
            cont++;

		}
	}
	if(cont>0){
        printf ("\n\nPRODUTO EXCLUIDO COM SUCESSO !");
        printf ("\nPressione ENTER Para Continuar !");
        setbuf(stdin,NULL);
        getchar ();
        system ("cls");
    }else {
        printf("Esse numero de codigo nao existe\n");
    }
}
int main (){
    int opicao;
    struct cadastra novoProduto;
    do{
        printf("MENU DE OPICAO\n");
        printf("1 - Cadastrar\n");
        printf("2 - Buscar\n");
        printf("3 - Alterar\n");
        printf("4 - Remover\n");
        printf("5 - Finalizar\n");
        printf("Digite o numero da opicao desejada \n");
        scanf("%d",&opicao);
        system("CLS");
        switch(opicao){
            case 1:
                novoProduto=leDados();
                cadastraProduto(novoProduto);
                break;
            case 2:
                buscar();
                break;
            case 3:
                alterar();
                break;
            case 4:
            	remover();
            	break;
            case 5:
                printf("Obrigado!\n");
                break;
            default:
                printf("Opcao invalida!\nTente novamente:\n");
                break;
        }
    }while(opicao!=5);

system("PAUSE");
return 0;
}

nesse código a professora pede pra colocar condição se o usuário digite uma string em um inteiro aparecer  um mensagem de erro.

por exemplo na hora que eu executar o programa que aparecer para que o usuário escolha um numero da opção desejada ele sem querer digitar uma string aparece-se uma mensagem de erro e pedi-se para ele tentar novamente.

 

E também não estou conseguindo fazer para quando eu terminar de cadastrar um produto aparecer uma mensagem perguntando se ele deseja cadastrar mais um produto se ele escolher sim ele volta para cadastrar outro produto  se ele escolher não terminava a execução e voltava para o menu inicial.

Eu sei que tem que ser ter um laço de repetição mas na hora de retornar um struct não da certo.

  • Curtir 1
Postado

@Marcos Paulo feitosa     seu código está bom ,  mas esse comando  que envia um struct  para a função não funciona assim , pois você pode mandar um struct para uma função e chegando nessa função você pode trabalhar com os dados desse struct porém não se pode retornar um struct, e também não há necessidade de uma função que retorna um struct, seria mais fácil com apenas um struct que seja global, e para ver se é  número ou letra você pode usar o comando isdigit ( ) , coloquei lá na função cadastro,   então seu código com algumas modificações ficaria assim :

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include<ctype.h>
#include <time.h>
#define MAX 100
int cont;
struct cadastra{
    int codigop,codigof,quantidade;
    char nome[30];
    char fornecedor[30];
    float preco;
};

struct cadastra cad[MAX];
int quantp=0;

void cadastraProduto(struct cadastra produto){
    cad[quantp] = produto;
    quantp++;
}


struct cadastra leDados(){
    char xx,qp[10];
    int w,i,c;
    do{
        xx='n';
        fflush(stdin);
        printf("Digite o nome do produto   pode ser letras ou numeros ");
        scanf("%s",cad[quantp].nome);
        cad[quantp].codigop = 1 + rand()%100;
        printf("Codigo do produto %d\n",cad[quantp].codigop);
        do{
            c=0;w=0;
            fflush(stdin);
            printf("Quantide de produtos para o estoque\n");
            scanf("%s",&qp);
            for(i=0;i<strlen(qp);i++){
                if( ! isdigit(qp[i])){
                    c=1;
                    break;
                }
            }
            if(c==0)
                cad[quantp].quantidade = atoi(qp);
            else {
                printf("Isso Nao eh Numero, Digite Certo.\n");
                w=1;
            }
        }while( w );
        fflush(stdin);
        printf("Nome do fornecedor   pode ser letras ou numeros ");
        scanf("%s",cad[quantp].fornecedor);
        cad[quantp].codigof = 1 + rand()%100;
        printf("Codigo do fornecedor %s eh %d\n",cad[quantp].fornecedor, cad[quantp].codigof);
        w=1;
        do{
            w=0;c=0;
            fflush(stdin);
            printf("Digite o preco do produto\n");
            scanf("%s",&qp);
            for(i=0;i<strlen(qp);i++){
                if( ! isdigit(qp[i])){
                    c=1;
                    break;
                }
            }
            if(c==0)
                cad[quantp].preco = atoi(qp);
            else {
                printf("Isso Nao eh Numero, Digite Certo.\n");
                w=1;
            }
        }while( w );
        fflush(stdin);
        quantp++;
        printf("Quer Cadastrar Outro Produto  S/N   e nao precisa de enter\n\n");
        xx=getch();
    }while(xx=='s');
    system("CLS");
}
void buscar(){
    int i,opica;
    char nome[30];
        do{
            printf("MENU DE BUSCA\n");
            printf("1- Mostrar lista de produtos\n");
            printf("2- Buscar pelo nome produto ou pelo nome do fornecedor\n");;
            printf("3- Sair do menu busca\n");
            printf("Digite o numero da opicao desejada \n");
            scanf("%d",&opica);
            system("CLS");
            switch(opica){
                case 1:
                    printf("Lista de produtos cadastrados\n");
                    for(i=0;i<quantp;i++){
                        printf("Produto %d \n",i+1);
                        printf("+++++++++++++++++++++++\n");
                        printf("Nome do produto:       %s\n",cad[i].nome);
                        printf("Codigo do produto:     %d\n",cad[i].codigop);
                        printf("Quantidade no estoque: %d\n",cad[i].quantidade);
                        printf("Nome do fornecedor:    %s\n",cad[i].fornecedor);
                        printf("Codigo do fornecedor:  %d\n",cad[i].codigof);
                        printf("Preço do produto:      %.2f\n",cad[i].preco);
                        printf("+++++++++++++++++++++++\n");
                    }
                    break;
                case 2:
                    printf("Digite o nome do produto ou nome do fornecedor\n");
                    scanf("%s",&nome);
                    for(i=0;i<quantp;i++){
                        if((strcmp (nome, cad[i].nome) == 0) || strcmp (nome, cad[i].fornecedor) == 0) {
                            printf("+++++++++++++++++++++++\n");
                            printf("Nome do produto:       %s\n",cad[i].nome);
                            printf("Codigo do produto:     %d\n",cad[i].codigop);
                            printf("Quantidade no estoque: %d\n",cad[i].quantidade);
                            printf("Nome do fornecedor:    %s\n",cad[i].fornecedor);
                            printf("Codigo do fornecedor:  %d\n",cad[i].codigof);
                            printf("Preço do produto:      %.2f\n",cad[i].preco);
                            printf("+++++++++++++++++++++++\n");
                        }
                    }
                    break;
                case 3:
                    break;
            }
        }while(opica!=3);
        system("CLS");
}
void alterar (){
    int i;
    char nome[30];
    fflush(stdin);
    printf("Digite o nome do produto que deseja alterar: ");
    scanf("%s",&nome);
    for(i=0;i<quantp;i++){
        if(strcmp (nome, cad[i].nome) == 0){
            fflush(stdin);
            printf("Digite o nome do produto\n");
            scanf("%s",&cad[i].nome);
            cad[i].codigop = 1 + rand()%10;
            printf("Codigo do produto %d\n",cad[i].codigop);
            fflush(stdin);
            printf("Quantide de produtos para o estoque\n");
            scanf("%d",&cad[i].quantidade);
            fflush(stdin);
            printf("Nome do fornecedor\n");
            scanf("%s",&cad[i].fornecedor);
            cad[i].codigof = 1 + rand()%10;
            printf("Codigo do fornecedor %s eh %d\n",cad[i].fornecedor, cad[i].codigof);
            fflush(stdin);
            printf("Digite o preço do produto\n");
            scanf("%f",&cad[i].preco);
            fflush(stdin);
        }
    }
    system("CLS");
}
void remover () {    			// Função remover
	int i,j,cont=0;
	int codigo_busc;
	printf("veja numero do produto que você deseja remover\n");
	buscar();                   // Chama a função listar para que seja visto qual codigo relacionado ao produto
	printf("Informe o Codigo do Produto que se Deseja Excluir: "); // Pede o codigo para busca
	scanf("%i",&codigo_busc);
	for(i = 0 ; i < quantp ; i++){
		if (cad[i].codigop == codigo_busc) {  // Compara o codigo relacionado e exclui
                    for(j=i;j<quantp;j++){
			    cad[j] = cad[j+1];                // Realoca a Memória
                    }
                    quantp--;                         // decrementa o indice do vetor para que ocupe o cadastro removido
                    cont++;
                    break;
		}
	}
	if(cont>0){
        printf ("\n\nPRODUTO EXCLUIDO COM SUCESSO !");
        printf ("\nPressione ENTER Para Continuar !");
        setbuf(stdin,NULL);
        getchar ();
        system ("cls");
    }else {
        printf("Esse numero de codigo nao existe\n");
    }
}
int main (){
    int opicao;
    srand(time (NULL));
    struct cadastra novoProduto;
    do{
        printf("MENU DE OPICAO\n");
        printf("1 - Cadastrar\n");
        printf("2 - Buscar\n");
        printf("3 - Alterar\n");
        printf("4 - Remover\n");
        printf("5 - Finalizar\n");
        printf("Digite o numero da opicao desejada \n");
        scanf("%d",&opicao);
        system("CLS");
        switch(opicao){
            case 1:
                novoProduto=leDados();
                break;
            case 2:
                buscar();
                break;
            case 3:
                alterar();
                break;
            case 4:
            	remover();
            	break;
            case 5:
                printf("Obrigado!\n");
                break;
            default:
                printf("Opcao invalida!\nTente novamente:\n");
                break;
        }
    }while(opicao!=5);
    system("PAUSE");
return 0;
}

 

  • Curtir 1
  • Membro VIP
Postado
2 horas atrás, Marcos Paulo feitosa disse:

você pode me explicar isso o que esse sinal de exclamação faz e esse isdigit

 

Sinal de "negação", ou seja, um "não". Que é o poder de "inverter" aquilo que foi associado... Pelo que eu vi, o isdigit() retorna um int, no caso "zero" ou "non-zero". O "não" tem o poder de inverter, ou seja, se a função retornar "zero", ao fazer a operação com o "não", vai resultar em "non-zero"... e vice-versa.

 

Resumidamente seria: a função isdigit() "verifica se o caractere informado é número". Mas como o que está sendo verificado é se o caractere NÃO é um número, usou-se "não isdigit()".

 

 

adicionado 8 minutos depois

PS: creio que a função sempre retornar "0" ou "1". O "0" para false, e o "1" para true. Daí, quando não for um número, vai retornar "0" (false), mas o if quer saber se não é um número, logo, faz a comparação com a negação do resultado.

 

Essa verificação de "números" também ocorre no while abaixo, onde verifica o valor do w. Quando "não é número", este passa a ser "1" (true), daí o while repete ("enquanto verdade repete").

 

  • Curtir 2
Postado

@Marcos Paulo feitosa    é o que o @Simon Viegas   disse,  esse sinal de exclamação é o operador  not da linguagem c/c++  ele inverte o resultado, então como precisa ver se é letra ou numero e o isdigit será verdadeiro se for número , então essa parte do código significa,   " se algum caractere dessa string não for número " , e esse isdigit verifica  um caractere de cada vez,   então coloquei esse loop de acordo com o tamanho " strlen " da variável que pegou os caracteres , com isso ele verifica caractere por caractere da string e se algum desses caracteres não for número de zero até 9 ele imprime a mensagem .

  • Curtir 1
Postado

@devair1010  valeu tinha esquecido que o ! era a negação mas agora eu entendi 

 

E eu tenho outra duvida quando eu digito um nome com espaço ele não mostra o que tem depois do espaço por exemplo se eu digitar "lápis de cor" quando eu peço para mostrar ele só mostra o "lápis" mas se eu buscar por "lapis de cor" ele mostra normalmente e também se eu digitar so "lapis" ele mostra normalmente também.

queria mudar isso mas não sei como pois não sei lidar muito bem com string ainda.

  • Curtir 1
Postado

@Marcos Paulo feitosa     para pegar a frase toda precisa usar o comando gets()  pois o scanf só pega a primeira palavra, então na hora de buscar pela palavra você teria que digitar a frase toda, para que seja igual,   então no lugar de :

printf("Digite o nome do produto   pode ser letras ou numeros ");
scanf("%s",cad[quantp].nome);

coloque

printf("Digite o nome do produto   pode ser letras ou numeros ");
gets(cad[quantp].nome);

 

  • Curtir 1
  • 1 ano depois...
Postado

bom dia eu preciso fazer um programa de cadastros de produtos que cadastre os produtos peça os preços e no final liste os produtos e de a soma dos produtos cadastrados vou colocar o programa que eu fiz a baixo se alguém puder me ajudar 

 

#include <stdio.h>
#include<stdlib.h>
#include <conio.h>

int main(void)
{
  int contador,preco,total=0;
  char produto,dec,j;
  
  
      system ("cls");
    printf("PROGRAMA PARA CADASTRAR PRODUTOS EM ESTOQUE \n\n");
    printf("\n\nDigite o codigo do produto e preco \n");
  
  
      for (contador = 0; contador<5; contador++) //rotina de cadastro de produto e seu preco
      {
      
    printf("\nPRODUTO :(%d) " , contador+1);
    scanf("\n%char",&produto);
    printf("PRECO      : " );
    scanf("%d",&preco);
    
    total = (preco + total);//faz a somatoria dos valores digitados
    
    
    printf("Deseja continuar? (S/N)");
    scanf("%c" , &j);
    }        

    return 0;
    
    
    {
                 
      printf("\n\n\n Total : %i", total);
      
  
    }
}

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!