Boa noite, galera. Resolvi pegar um exercício em C para resolver, porém, tive algumas dificuldades. No exercício pede para printar a receita com os ingredientes e estou com duvida como faço para printar todos os ingredientes. Pois, se eu colocar mais de um ingredientes, na hora de printar ele só printa o último ingrediente.
Fac¸a um programa para armazenar um livro de receitas e:
• Crie um vetor de 5 receitas, que deve ter nome (maximo 25 letras), quantidade de ´
ingredientes e ingredientes.
• Para cada receita, leia seu nome e a quantidade de ingredientes. Entao crie e leia ˜
o vetor de ingredientes, sendo que cada ingrediente contem nome e quantidade. ´
• Procure receita por nome, mostrando seus ingredientes se encontrar. Se nao en- ˜
contrar, informe ao usuario. Repita o processo at ´ e digitar uma string vazia.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct ing {
char nome[25];
int quant;
};
typedef struct ing Ing;
struct receitas {
char nome[25];
int quant;
Ing ingredientes;
};
typedef struct receitas Receitas;
int buscaReceita (char *nome1, char *nome2){
if (strcmp(nome1, nome2) == 0)
return 1;
else
return 0;
}
int main (void){
int n = 1;
Receitas *rec = (Receitas *)malloc(n * sizeof(Receitas));
for (int i = 0; i < n; i++){
printf("receita: ");
scanf("%25[^\n]s", rec[i].nome);
printf("\nquantidade de ingredientes: ");
scanf("%d", &rec[i].quant);
setbuf(stdin, NULL);
for (int j = 0; j < rec[i].quant; j++){
printf("ingrediente %d: ", j+1);
scanf("%25[^\n]s", rec[i].ingredientes.nome);
printf("quantidade: ");
scanf("%d", &rec[i].ingredientes.quant);
setbuf(stdin, NULL);
}
printf("\n");
}
char nomeReceita[25];
printf("nome da receita: ");
scanf("%25[^\n]s", nomeReceita);
setbuf(stdin, NULL);
char *vazio = "0";
int i = 0;
while (strcmp(nomeReceita, vazio) != 0){
for (int i = 0; i < n; i++){
if (buscaReceita(nomeReceita, rec[i].nome) == 1){
printf("%s: ", rec[i].nome);
printf("%s ", rec[i].ingredientes.nome);
}
}
printf("\nnome da receita: ");
scanf("%25[^\n]s", nomeReceita);
setbuf(stdin, NULL);
}
free(rec);
return 0;
}