Ir para conteúdo
Fórum Script Brasil
  • 0

Struct


viciado

Pergunta

Erro na linha 51:

"incompatible types in assignment"

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

#define MAX 5
struct papelaria
       {
                int codigo;
                char descricao[50];
                float valor;
                int quant;
                }dados[MAX];
void alterar();
int main()
{
  int i;
  char tecla = 's';
  for(i=0;i<MAX;i++){
                     printf("Digite o codigo: \n");
                     scanf("%d",&dados[i].codigo);
                     printf("Digite a descricao: \n");
                     fgets(dados[i].descricao, 50, stdin);
                     printf("Digite o valor unitario: \n");
                     scanf("%f",&dados[i].valor);
                     printf("Digite a quantidade em estoque: \n");
                     scanf("%d",&dados[i].quant);
                     }
  printf("Deseja alterar ?\n (s) sim (n) não");
  tecla = getch();
  if(tecla == 's'){
           alterar();
           } 
  system("PAUSE");
  return 0;
}
void alterar(){
     int cod, i;
     char descricao[50];
     float valor;
     int quant;
     printf("Digite nova descricao \n");
     fgets(descricao, 50, stdin);
     printf("Digite novo valor: \n");
     scanf("%f",&valor);
     printf("Digite nova quantidade: \n");
     scanf("%d",&quant);
     printf("Alterar dados \n");
     printf("Informa o codigo do produto a ser alterado \n");
     scanf("%d",&cod);
     for(i=0;i<MAX;i++){
                        if(cod == dados[i].codigo){
                               dados[i].descricao = descricao;
                               dados[i].valor = valor;
                               dados[i].quant = quant;
                               }
                        else{
                             printf("Codigo errado \n");
                             }
                             }
}

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Você está usando o operador igual em uma string. A forma correta de copiar é usando strcpy da string.h.

strcpy(dados.descricao, descricao);

Outra coisa, fica mais fácil se você informar a linha no código, com um comentário.

Pois não há como ficar contando que linha é aqui. Mas em uma IDE, por exemplo, ele já mostra a linha para você.

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

Não mostra erro em alguma linha, a mensagem é: undefined reference to `__cpu_features_init'

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

#define MAX 5
struct papelaria
       {
                int codigo;
                char descricao[50];
                float valor;
                int quant;
                }dados[MAX];
void alterar();
int main()
{
  int i;
  char tecla = 's';
  for(i=0;i<MAX;i++){
                     printf("Digite o codigo: \n");
                     scanf("%d",&dados[i].codigo);
                     printf("Digite a descricao: \n");
                     fgets(dados[i].descricao, 50, stdin);
                     printf("Digite o valor unitario: \n");
                     scanf("%f",&dados[i].valor);
                     printf("Digite a quantidade em estoque: \n");
                     scanf("%d",&dados[i].quant);
                     }
  printf("Deseja alterar ?\n (s) sim (n) não");
  tecla = getch();
  if(tecla == 's'){
           alterar();
           } 
  system("PAUSE");
  return 0;
}
void alterar(){
     int cod, i;
     char descricao[50];
     float valor;
     int quant;
     printf("Digite nova descricao \n");
     fgets(descricao, 50, stdin);
     printf("Digite novo valor: \n");
     scanf("%f",&valor);
     printf("Digite nova quantidade: \n");
     scanf("%d",&quant);
     printf("Alterar dados \n");
     printf("Informa o codigo do produto a ser alterado \n");
     scanf("%d",&cod);
     for(i=0;i<MAX;i++){
                        if(cod == dados[i].codigo){
                               strcpy(dados[i].descricao,descricao);
                               dados[i].valor = valor;
                               dados[i].quant = quant;
                               }
                        else{
                             printf("Codigo errado \n");
                             }
                             }
}

Editado por viciado
Link para o comentário
Compartilhar em outros sites

  • 0

Aqui fncionou

Mas há um erro na função alterar().

Você colocou a exibição de erro dentro do loop. Isso fará com que ele seja exibida MAX vezes se o produto não for achado e MAX - 1 se for.

faça assim:

int achou = 0;
     for(i=0;i<MAX;i++){
                        if(cod == dados[i].codigo){
                               strcpy(dados[i].descricao,descricao);
                               dados[i].valor = valor;
                               dados[i].quant = quant;
                               achou = 1;
                               }
                        
                             }
                             if (!achou)
                             {
                             printf("Codigo errado \n");
                             }

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...