[英]How to display the data entered in C
你好吗? 我在设计程序时遇到困难,想知道您是否可以帮助我。 这项工作是为公司制作产品注册系统。 为了更好地解释,我能够做一些事情:
在那之后,这将是我的问题:
提前感谢您的任何帮助、意见和批评。
#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);
}
}
您只需传递要打印的字段名称。
您可以使用enum
来声明字段类型。 例如:
enum field_type { nome = 1, valor = 2, sabor = 4, recheio = 8 };
请注意,在此示例中,选择的数字是2
的幂: 1, 2, 4, 8
您可以使用按位 OR 运算符组合这些字段,并使用按位 AND 运算符提取字段。
#include <stdio.h>
struct produto
{ char nome[30]; float valor; int sabor; int recheio; };
enum field_type { nome = 1, valor = 2, sabor = 4, recheio = 8 };
void print(struct produto p[], int count, int fields)
{
for (int i = 0; i < count; i++)
{
if (fields & nome) printf("%s ", p[i].nome);
if (fields & valor) printf("%.2f ", p[i].valor);
if (fields & sabor) printf("%d ", p[i].sabor);
if (fields & recheio) printf("%d ", p[i].recheio);
printf("\n");
}
}
int main(void)
{
struct produto p[] = {
{ "nome1", 0.1f, 100, 1000 },
{ "nome2", 0.2f, 200, 2000 },
{ "nome3", 0.3f, 300, 3000 }};
int count = 3;
printf("print by nome:\n");
print(p, count, nome);
printf("print by nome + valor + recheio:\n");
print(p, count, nome | valor | recheio);
}
另外, fflush(stdout)
还可以,但是 C 标准中没有fflush(stdin)
。 查看评论和链接。
如果要读取 integer 并忽略该行的 rest,请考虑使用不同的方法,例如
char buf[100];
int i;
printf("Enter integer:\n");
fgets(buf, sizeof(buf), stdin);
i = atoi(buf);
printf("You entered %d\n", i);
否则只需使用
if (sscanf("%d", &i) == 1)
printf("You entered %d\n", i);
使用int main(void)
代替void main()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.