【发布时间】:2022-01-10 14:34:50
【问题描述】:
你好吗?我在设计程序时遇到困难,想知道您是否可以帮助我。这项工作是为公司制作产品注册系统。为了更好地解释,我可以做一些事情:
- 我创建了包含名称、值的产品结构,我们选择风味和填充作为特征
- 我创建了一个无效的主菜单,有 4 种可能性(工作中描述的 3 种 + 1 种终止程序)
- 我为用户选择的可能性创造了一个带有回报的空白
- 我根据结构产品创建了无效注册,但我无法找到一种方法来重复它而不为 for 设置值;但是,我不想设置重复值。
在那之后,这将是我的问题:
- 如何打印客户注册的产品同时具有两个特性(风味和填充物)的表格。
提前感谢您的任何帮助、意见和批评。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct produto
{
char nome[30];
float valor;
int sabor;
int recheio;
};
void menu_principal()
{
printf("\t\t\tMENU PRINCIPAL");
printf("\n1: Digite 1 para incluir um produto");
printf("\n2: Digite 2 para imprimir a lista de produtos");
printf("\n3: Digite 3 para consultar o valor de um produto");
printf("\n4: Digite 4 para encerrar o programa");
}
void menu_escolha(char *escolha)
{
printf("\nDigite sua escolha: ");
scanf(" %c", &(*escolha));
}
void cadastro(struct produto p[])
{
int i, quant = 0;
printf("\t\t\tCADASTRO DE PRODUTO");
printf("\nQuantos produtos voce ira cadastrar? ");
scanf("%d", &quant);
for(i = 0; i < quant; i++)
{
fflush(stdin);
printf("\nNome do produto %d: ", i + 1);
gets(p[i].nome);
do
{
fflush(stdin);
printf("Sabor do produto %d (1: doce / 2: salgado): ", i + 1);
scanf("%d", &p[i].sabor);
}
while(p[i].sabor < 1 || p[i].sabor > 2);
do
{
fflush(stdin);
printf("Recheio do produto %d (1: chocolate / 2: baunilha / 3: frango / 4: carne): ", i + 1);
scanf("%d", &p[i].recheio);
}
while(p[i].recheio < 1 || p[i].recheio > 4);
do
{
fflush(stdin);
printf("Valor do produto %d (ex.: 1.23): ", i + 1);
scanf("%f", &p[i].valor);
}
while(p[i].valor < 0);
}
}
void impressao_sabor(struct produto p[], int tipo_um)
{
int i;
for(i = 0; i < 30; i++)
{
if(p[i].sabor == tipo_um)
{
printf("\nNome do produto : %s", p[i].nome);
printf("\nSabor do produto : %d", p[i].sabor);
printf("\nRecheio do produto : %d", p[i].recheio);
}
}
printf("\n");
}
void impressao_recheio(struct produto p[], int tipo_dois)
{
int i;
for(i = 0; i < 3; i++)
{
if(p[i].recheio == tipo_dois)
{
printf("Nome do produto %d: %s", i+1, p[i].nome);
printf("Sabor do produto %d: %d", i+1, p[i].sabor);
printf("Recheio do produto %d: %d", i+1, p[i].recheio);
}
}
printf("\n");
}
void main()
{
struct produto p[30];
char escolha;
char decisao;
menu_principal();
menu_escolha(&escolha);
switch(escolha)
{
case '1':
cadastro(p);
printf("\nAdicionar mais um produto? s/n: ");
scanf(" %c", &decisao);
printf("\n");
do
{
if(decisao == 's')
{
cadastro(p);
printf("\nAdicionar mais um produto? s/n: ");
scanf(" %c", &decisao);
printf("\n");
}
}
while(decisao == 's');
if(decisao == 'n')
{
menu_principal();
menu_escolha(&escolha);
}
case '2':
printf("\t\t\tLISTA DOS PRODUTOS");
printf("\nSabores dos produtos");
printf("\nDoce");
impressao_sabor(p,1);
printf("\nSalgado");
impressao_sabor(p,2);
;
case '3':
//consulta(p);
//menu_principal();
break;
case '4':
printf("\nObrigada por usar o programa!");
break;
default:
printf("Opcao invalida!");
menu_escolha(&escolha);
}
}
【问题讨论】:
-
请尝试创建minimal reproducible example 向我们展示,重点是minimal部分。
-
永远不要使用
gets:stackoverflow.com/questions/1694036/… -
而不是
for( int i = 0; i < s ; i++ ) { ... p[i].nome ...},它更惯用,更容易理解for( struct produto *t = p; t < p + s; t++ ){ ... t->nome } -
@WilliamPursell 感谢这些提示,我将在我的代码中应用它们
-
请尝试用最少的行创建问题。欲了解更多信息,请访问页面。 stackoverflow.com/help/minimal-reproducible-example