繁体   English   中英

C中输入的数据如何显示

[英]How to display the data entered in C

你好吗? 我在设计程序时遇到困难,想知道您是否可以帮助我。 这项工作是为公司制作产品注册系统。 为了更好地解释,我能够做一些事情:

  1. 我创建了具有名称、价值的产品结构,我们选择了风味和填充作为特征
  2. 我创建了一个有 4 种可能性的 void 主菜单(工作中描述的 3 种 + 1 终止程序)
  3. 我为用户选择的可能性创造了一个带有回报的空白
  4. 我基于结构产品创建了无效注册,但我无法找到一种方法来重复它而不为 for 设置值; 但是,我不想设置重复值。

在那之后,这将是我的问题:

  1. 如何打印客户注册的具有两个特性(风味和填充)的产品表。

提前感谢您的任何帮助、意见和批评。

#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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM