String in Struct - C Language

Asked

Viewed 248 times

0

I can’t use a string inside the struct I created. Without this string, the program gives some warnings but works normally.

PS: I only need help with the string error, as the error message has become extensive.

Follow the code then the error message:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

#define COCA_COLA_250 3,50
#define COCA_COLA_1000 8,00
#define FANTA_LARANJA_250 3,00
#define FANTA_LARANJA_1000 7,50
#define GUARANA_ANTARTIDA_250 3,50
#define GUARANA_ANTARTIDA_1000 8,00

#define MARACUJA_250 3,50
#define LIMONADA_250 3,00
#define LARANJA_250 3,00

struct refri
{
    char pedido_um [] = "Cola Cola";
    char pedido_dois [20];
    char pedido_tres [20];

    int escolha;
    int tamanho;
    int quantidade_unidade;

} pedido_refrigerante;

int refrigerante (int *preco_total)
{
    int refri_pequeno = 250;
    int refri_medio = 1;

        printf("+===============================REFRIGERANTES==============================+\n");
        printf("|---------------------- Escolha o(s) refrigerante(s): ---------------------|\n");
        printf("|------- 1 > Coca Cola \t 2 > Guarana Antartida \t 3 > Fanta Laranja ------|\n");
        printf("+==========================================================================|\n");
        printf("|------------------------------ 0 > Cancelar ------------------------------|\n");
        printf("+==========================================================================+\n");

            scanf("%d", &pedido_refrigerante.escolha);

    switch(pedido_refrigerante.escolha)
    {
        case 1:
        printf("Quantas unidades de %s ? \n", pedido_refrigerante.pedido_um);
        scanf("%d", &pedido_refrigerante.quantidade_unidade);

        printf("Escolha um tamanho: \n");
        printf(" 1 > ml %d \n 2 > l %d \n", refri_pequeno, refri_medio);
        scanf("%d", &pedido_refrigerante.tamanho);

            if (pedido_refrigerante.tamanho == refri_pequeno)
            {
                printf("Pedido de %d unidades de %s de %d ml\n", pedido_refrigerante.quantidade_unidade, pedido_refrigerante.pedido_um, pedido_refrigerante.tamanho);

            }else{
                printf("Pedido de %d unidades de %s de %d \\l \n", pedido_refrigerante.quantidade_unidade, pedido_refrigerante.pedido_um, pedido_refrigerante.tamanho);
            }
    }

    return (preco_total);
}

int menu ()
{
    int pedido_bebida;

    printf("+========================BEBIDAS=======================+\n");
    printf("|--------------- Escolha uma categoria: ---------------|\n");
    printf("|----------------- 1 > Refrigerantes ------------------|\n");
    printf("|---------------------- 2 > Sucos ---------------------|\n");
    printf("+======================================================|\n");
    printf("|-------------------- 0 > Cancelar --------------------|\n");
    printf("+======================================================+\n");

    scanf("%d", &pedido_bebida);

    switch(pedido_bebida)
    {
    case 1:
        refrigerante(pedido_bebida);
        break;

    case 2:

        break;

    case 0:

        break;

    default:

        break;

    }
return (pedido_bebida);
}

int main()
{

    menu();

    return 0;
}
main.c:19:20: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token
  char pedido_um [] = "Cola Cola";
                    ^
main.c: In function ‘refrigerante’:
main.c:41:45: error: ‘struct refri’ has no member named ‘escolha’
             scanf("%d", &pedido_refrigerante.escolha);
                                             ^
main.c:43:28: error: ‘struct refri’ has no member named ‘escolha’
  switch(pedido_refrigerante.escolha)
                            ^
main.c:46:66: error: ‘struct refri’ has no member named ‘pedido_um’
         printf("Quantas unidades de %s ? \n", pedido_refrigerante.pedido_um);
                                                                  ^
main.c:47:41: error: ‘struct refri’ has no member named ‘quantidade_unidade’
         scanf("%d", &pedido_refrigerante.quantidade_unidade);
                                         ^
main.c:51:41: error: ‘struct refri’ has no member named ‘tamanho’
         scanf("%d", &pedido_refrigerante.tamanho);
                                         ^
main.c:53:36: error: ‘struct refri’ has no member named ‘tamanho’
             if (pedido_refrigerante.tamanho == refri_pequeno)
                                    ^
main.c:55:85: error: ‘struct refri’ has no member named ‘quantidade_unidade’
                 printf("Pedido de %d unidades de %s de %d ml\n", pedido_refrigerante.quantidade_unidade, pedido_refrigerante.pedido_um, pedido_refrigerante.tamanho);
                                                                                     ^
main.c:55:125: error: ‘struct refri’ has no member named ‘pedido_um’
                 printf("Pedido de %d unidades de %s de %d ml\n", pedido_refrigerante.quantidade_unidade, pedido_refrigerante.pedido_um, pedido_refrigerante.tamanho);
                                                                                                                             ^
main.c:55:156: error: ‘struct refri’ has no member named ‘tamanho’
                 printf("Pedido de %d unidades de %s de %d ml\n", pedido_refrigerante.quantidade_unidade, pedido_refrigerante.pedido_um, pedido_refrigerante.tamanho);
                                                                                                                                                            ^
main.c:58:87: error: ‘struct refri’ has no member named ‘quantidade_unidade’
                 printf("Pedido de %d unidades de %s de %d \\l \n", pedido_refrigerante.quantidade_unidade, pedido_refrigerante.pedido_um, pedido_refrigerante.tamanho);
                                                                                       ^
main.c:58:127: error: ‘struct refri’ has no member named ‘pedido_um’
                 printf("Pedido de %d unidades de %s de %d \\l \n", pedido_refrigerante.quantidade_unidade, pedido_refrigerante.pedido_um, pedido_refrigerante.tamanho);
                                                                                                                               ^
main.c:58:158: error: ‘struct refri’ has no member named ‘tamanho’
                 printf("Pedido de %d unidades de %s de %d \\l \n", pedido_refrigerante.quantidade_unidade, pedido_refrigerante.pedido_um, pedido_refrigerante.tamanho);
                                                                                                                                                              ^
main.c:62:12: warning: return makes integer from pointer without a cast [-Wint-conversion]
     return (preco_total);
            ^
main.c: In function ‘menu’:
main.c:82:22: warning: passing argument 1 of ‘refrigerante’ makes pointer from integer without a cast [-Wint-conversion]
         refrigerante(pedido_bebida);
                      ^~~~~~~~~~~~~
main.c:29:5: note: expected ‘int *’ but argument is of type ‘int’
 int refrigerante (int *preco_total)
     ^~~~~~~~~~~~
  • If what you put in your define are numerical values then note that in C "decimal point" is used and not "decimal point". Maybe there was a transcription error but here: char pedido_um [] = "Cola Cola;missed " by closing the string. You set the function int refrigerante (int *preco_total) { like returning an int but doing: return (preco_total); but preco_total is a pointer to int and not an int.

  • I closed the string with quotes but I still can’t

  • Set a fixed length for the string and use the strcpy function to put a value on this string.

  • 1

    I see pedido_um, pedido_dois and pedido_tres within your struct refri. That means that inside a soda, we have three orders. I don’t think that makes sense.

  • Inside the refrigerant structure there are three possible types of refrigerants

  • Note that there is a difference between "defining a structure" and "declaring variables of the structure type". You can initialize the components of a structure type variable by declaring it. Ex. struct point&#xA; {&#xA; int x, y;&#xA; };&#xA;struct point first_point = { 5, 10 };.

  • 3

    I caught a mistake, but there are many, do not make a whole code full of errors, make a detail, see if it worked, then go to the next one. When everything is wrong the solution is to throw away and start again. Or else get someone to give a ready-made solution that will teach nothing.

Show 2 more comments

1 answer

-2

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

#define COCA_COLA_250 3.50
#define COCA_COLA_1000 8.00
#define FANTA_LARANJA_250 3.00
#define FANTA_LARANJA_1000 7.50
#define GUARANA_ANTARTIDA_250 3.50
#define GUARANA_ANTARTIDA_1000 8.00

#define MARACUJA_250 3.50
#define LIMONADA_250 3.00
#define LARANJA_250 3.00

struct refri
{
    char pedido_um[20];
    char pedido_dois[20];
    char pedido_tres[20];

    int escolha;
    int tamanho;
    int quantidade_unidade;

} pedido_refrigerante = {.pedido_um = "Coca Cola"};

int refrigerante(int *preco_total)
{
    int refri_pequeno = 250;
    int refri_medio = 1;

    printf("+===============================REFRIGERANTES==============================+\n");
    printf("|---------------------- Escolha o(s) refrigerante(s): ---------------------|\n");
    printf("|------- 1 > Coca Cola \t 2 > Guarana Antartida \t 3 > Fanta Laranja ------|\n");
    printf("+==========================================================================|\n");
    printf("|------------------------------ 0 > Cancelar ------------------------------|\n");
    printf("+==========================================================================+\n");

    scanf("%d", &pedido_refrigerante.escolha);

    switch (pedido_refrigerante.escolha)
    {
    case 1:
        printf("Quantas unidades de %s ? \n", pedido_refrigerante.pedido_um);
        scanf("%d", &pedido_refrigerante.quantidade_unidade);

        printf("Escolha um tamanho: \n");
        printf(" 1 > ml %d \n 2 > l %d \n", refri_pequeno, refri_medio);
        scanf("%d", &pedido_refrigerante.tamanho);

        if (pedido_refrigerante.tamanho == refri_pequeno)
        {
            printf("Pedido de %d unidades de %s de %d ml\n",
                   pedido_refrigerante.quantidade_unidade, pedido_refrigerante.pedido_um,
                   pedido_refrigerante.tamanho);

        }
        else
        {
            printf("Pedido de %d unidades de %s de %d \\l \n",
                   pedido_refrigerante.quantidade_unidade, pedido_refrigerante.pedido_um,
                   pedido_refrigerante.tamanho);
        }
    }

    return *preco_total;
}

int menu()
{
    int pedido_bebida;

    printf("+========================BEBIDAS=======================+\n");
    printf("|--------------- Escolha uma categoria: ---------------|\n");
    printf("|----------------- 1 > Refrigerantes ------------------|\n");
    printf("|---------------------- 2 > Sucos ---------------------|\n");
    printf("+======================================================|\n");
    printf("|-------------------- 0 > Cancelar --------------------|\n");
    printf("+======================================================+\n");

    scanf("%d", &pedido_bebida);

    switch (pedido_bebida)
    {
    case 1:
        refrigerante(&pedido_bebida);
        break;

    case 2:

        break;

    case 0:

        break;

    default:

        break;

    }

    return pedido_bebida;
}

int main()
{

    menu();

    return 0;
}

I couldn’t understand the code, but at least I removed the errors and warnings.

  • 2

    Do not do this, debug a code without understanding its meaning, as you may incur the same errors as Ides by suggesting absurd changes to our code because they do not understand what we are doing. It did not help the user at all, the difficulties he had remain and in the next building of code the same errors will resurface.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.