Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
#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;a. Insira um novo restaurante;
b. Liste todos os restaurantes na tela; 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;
}>
Qual é a dúvida?
TIPO, NÃO SEI PORQUE NÃO COMPILA(NÃO VEJO O ERRO), QUERIA UMA AJUDA
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};}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
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.
_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.
Posso marcar o tópico como resolvido?
pode sim!
Qual é a dúvida?