Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

yala neb

[Resolvido] linguagem C... estrutura com struct

Recommended Posts

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

typedef struct{
char nomerestau[]= "boaviagem";
char endereco[]="recife";
char tipocomida[]="brasileira";
float nota[]={4};

}Restaurante1;

typedef struct{
char nomerestau[]= "sempremais";
char endereco[]="olinda";
char tipocomida[]="italiana";
float nota={3};

}Restaurante2;

typedef struct{
char nomerestau[]= "yoki";
char endereco[]="ceara";
char tipocomida[]="chinesa";
float nota[]={4.5};

}Restaurante3;
int main()
{
   /**
   Crie uma struct para descrever restaurantes. Os campos devem armazenar o
nome do restaurante, o endereço, o tipo de comida (brasileira, chinesa,
francesa, italiana, japonesa, etc.) e uma nota para a cozinha (entre 0 e 5).
Crie uma aplicação que posso desempenhar as seguintes funções:
a. Insira um novo restaurante;
b. Liste todos os restaurantes na tela;
c. Liste os restaurantes com cozinha com nota superior a um determinado
valor, determinado pelo usuário;
d. Liste todos os restaurantes com determinado tipo de comida, determinado
pelo usuário.
   */
   char novorestau[25];
   Restaurante1 r1;
   Restaurante2 r2;
   Restaurante3 r3;
   float superior;
   int comida;

   printf("\ninsira um novo restaurante:\n");
   gets(novorestau);
   printf("\n***restaurantes armazenados***\n");
   printf("\nRESTAURANTE 1::\n%s\n\n%s\n\n%s\n%f\n",r1.nomerestau,r1.endereco,r1.tipocomida,r1.nota);
   printf("\nRESTAURANTE 2::\n%s\n\n%s\n\n%s\n%f\n",r2.nomerestau,r2.endereco,r2.tipocomida,r2.nota);
   printf("\nRESTAURANTE 3::\n%s\n\n%s\n\n%s\n%f\n",r3.nomerestau,r3.endereco,r3.tipocomida,r3.nota);

   printf("\ndeseja conferir restaurante com nota superior a que nota?\n");
   scanf("%f",&superior);

   if(superior>0 && superior<3.0)
   {
       printf("\nRESTAURANTE 1::\n%s\n\n%s\n\n%s\n%f\n",r1.nomerestau,r1.endereco,r1.tipocomida,r1.nota);
       printf("\nRESTAURANTE 2::\n%s\n\n%s\n\n%s\n%f\n",r2.nomerestau,r2.endereco,r2.tipocomida,r2.nota);
       printf("\nRESTAURANTE 3::\n%s\n\n%s\n\n%s\n%f\n",r3.nomerestau,r3.endereco,r3.tipocomida,r3.nota);
   }
   if(superior>3.0)
   {
       printf("\nRESTAURANTE 1::\n%s\n\n%s\n\n%s\n%f\n",r1.nomerestau,r1.endereco,r1.tipocomida,r1.nota);
       printf("\nRESTAURANTE 3::\n%s\n\n%s\n\n%s\n%f\n",r3.nomerestau,r3.endereco,r3.tipocomida,r3.nota);
   }
   if(superior>4.0)
   {
       printf("\nRESTAURANTE 3::\n%s\n\n%s\n\n%s\n%f\n",r3.nomerestau,r3.endereco,r3.tipocomida,r3.nota);

   }
   printf("\n[1] COMIDA BRASILEIRA \n");
   printf("\n[2] COMIDA ITALIANA \n");
   printf("\n[3] COMIDA CHINESA \n");
   scanf("%d",&comida);
   switch (comida){
       case 1:
       printf("\nRESTAURANTE 1::\n%s\n\n%s\n\n%s\n%f\n",r1.nomerestau,r1.endereco,r1.tipocomida,r1.nota);
       break;
       case 2:
       printf("\nRESTAURANTE 2::\n%s\n\n%s\n\n%s\n%f\n",r2.nomerestau,r2.endereco,r2.tipocomida,r2.nota);
       default:
       printf("\nRESTAURANTE 3::\n%s\n\n%s\n\n%s\n%f\n",r3.nomerestau,r3.endereco,r3.tipocomida,r3.nota);

   }


   return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu também estou aprendendo C/C++ e acho que posso te ajudar um pouco...

 

Veja o código abaixo:

typedef struct{
char nomerestau[]= "boaviagem";
char endereco[]="recife";
char tipocomida[]="brasileira";
float nota[]={4};

}Restaurante1;

 

 

Se não estou enganado, o "typedef" atribui um novo nome para o anterior, como:

typedef int INTEIRO; <- precisa de um outro nome

Você não especificou um nome novo pra sua estrutura, o certo seria:

 

typedef struct res1{
char nomerestau[]= "boaviagem";
char endereco[]="recife";
char tipocomida[]="brasileira";
float nota[]={4};
/*
OBS... FLOAT COM COLCHETES? Isso existe? .__.
não sei não, mas acho que também tá errado
*/

}Restaurante1;

 

 

Mais uma coisa, você criou 3 estruturas diferentes e atribuiu valores padrão pra cada uma, não sei se isso é certo e nem sei se é um código válido, acho que você deveria criar apenas uma estrutura e usá-la para armazenar os dados diferentes, exemplo:

 

typedef struct ress{
char nomerestau[],endereco[],tipocomida[];
float nota;

}Restaurante;


Restaurante res1;
strcpy(res1.nomerestau,"boaviagem");
strcpy(res1.endereco,"recife");
strcpy(res1.tipocomida,"brasileira");
res1.nota = 4.0;

Restaurante res2;
strcpy(res1.nomerestau,"sempremais");
strcpy(res1.endereco,"olinda");
strcpy(res1.tipocomida,"italiana");
res1.nota = 3.0;

/* E assim vai =D */

 

 

 

Bom, é isso! Espero que dê certo, mas se não der me desculpa, também estou aprendendo e só quero ajudar...

Sucesso pra nós :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não importa se os nomes são repetidos dentro de typedefs diferentes. O escopo deles é diferente. Isso não causa nenhum erro de compilação.

O que está dando erro são as atribuições dentro dos typedefs.

 

Float é um tipo de dados primitivo. Quando você declara float nota[] você está declarando um array de floats e não uma variável do tipo float.

 

E quanto às strings, é necessário declarar a quantidade de caracteres que o array suporta dentro dos colchetes, senão o programa não compila.

 

A dica vale p/ os dois: acostumem-se a usar as opções do compilador p/ ver os erros. A julgar pelo conio.h, vcs estão programando no Windows. Minha sugestão é que baixem um Virtualbox e instalem um Linux (Ubuntu, Opensuse) porque o acesso às ferramentas necessárias p/ compilar um programa em C é muito mais fácil que se virar com as configurações de uma IDE, mesmo que seja por linha de comando.

 

Outra coisa: evitem a conio se possível.

Compartilhar este post


Link para o post
Compartilhar em outros sites

_Isis_,

 

É verdade, precisa declarar o tamanho das strings, pensei que colocando apenas os colchetes ficaria com tamanho indefinido...

 

Ainda não sei ver os erros pelas opções do compilador e não sou muito acostumado com linux (tenho o Fedora instalado). Mas sei que vou ter que aprender essas coisas, o que você falou apenas reforçou essa ideia. Obrigado pelas dicas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.