Ir ao conteúdo

C Erro de variável, e como como posso adicionar uma lista ao finalizar?


Ir à solução Resolvido por Ansi C,

Posts recomendados

Postado

O algoritmo devia possibilitar o usuário escolher vários itens varias vezes e finalizar ao digitar um numero diferente de 1-7 porém não está rodando. Ao finalizar deve exibir uma lista com o numero do item comprando, preço unitário, produto e valor total, tem como fazer isso usando os switchs e printf ou precisa usar char, strings, etc?

#include<stdlib.h>
#include<stdio.h>
#include<locale.h>

int main()
{
	//declarar variaveis
	int qtd, item;
	float total;

	//permitir acentuação
	setlocale(LC_ALL, "Portuguese");
	
	//menu
	printf("\n");
	printf(" ___________________________________________________\n");
	printf("| Item|  Produto         | Código |  Preço Unitário |\n");
	printf("|  1  | Cachorro-quente  |  100   |      5,00       |\n");
	printf("|  2  | X-Salada         |  101   |      8,79       |\n");
	printf("|  3  | X-Bacon          |  102   |      9,99       |\n");
	printf("|  4  | Misto            |  103   |      6,89       |\n");
	printf("|  5  | Salada           |  104   |      4,80       |\n");
	printf("|  6  | Água             |  105   |      3,49       |\n");
	printf("|  7  | Refrigerante     |  106   |      4,99       |\n");
	printf("|_____|__________________|________|_________________|\n");

	//permitir escolha de varios itens
	while ((item > 1) && (item < 7))
	{
		//escolha do pedido e quantidade
		printf("Escolha um item: ");
		scanf_s("%d", &item);

		//armazenar os dados dos pedidos
		switch (item) 
		{

		case 1: //cachorro-quente
			printf("Digite a quantidade: ");
			scanf_s("%d", &qtd);
			total = total + (5, 00 * qtd);
			break;

		case 2: //x-salada
			printf("Digite a quantidade: ");
			scanf_s("%d", &qtd);
			total = total + (8, 79 * qtd);
			break;

		case 3: //x-bacon
			printf("Digite a quantidade: ");
			scanf_s("%d", &qtd);
			total = total + (9, 99 * qtd);
			break;

		case 4: //misto
			printf("Digite a quantidade: ");
			scanf_s("%d", &qtd);
			total = total + (6, 89 * qtd);
			break;

		case 5: //salada
			printf("Digite a quantidade: ");
			scanf_s("%d", &qtd);
			total = total + (4, 80 * qtd);
			break;

		case 6: //agua
			printf("Digite a quantidade: ");
			scanf_s("%d", &qtd);
			total = total + (3, 49 * qtd);
			break;

		case 7: //refrigerante
			printf("Digite a quantidade: ");
			scanf_s("%d", &qtd);
			total = total + (4, 99 * qtd);
			break;
		default://finalizar ao digitar um numero diferente de 1-7
			printf("\n Pedido finalizado\n valor total = %.2f", total);
			item=(item > 1) && (item < 7);
			break;
		}
	}
	system("pause");
	return 0;
}

 

  • Curtir 1
  • Obrigado 1
Postado

Bom, você esqueceu de inicializar item pra então ser possível entrar no while. Ou seja, 

 

int qtd = 0, item = 1;

 

E não esqueça de incluir os casos 1 e 7 no intervalo de possibilidades:

 

while ((item >= 1) && (item <= 7))

 

E por fim, em linhas assim:

 

total = total + (4, 99 * qtd);

 

o idioma está incorreto. Você quis dizer:

 

total = total + (4.99 * qtd);

 

  • Curtir 1
  • Obrigado 2
Postado

@Battata    boa solução a do  @V!OLADOR   ,  e você  poderia substituir o while pelo   do / while  ,  e assim não precisaria inicializar nenhuma variável de seu código atual  ,  e também você repetiu várias vezes essa Linha 

total = total + (4, 99 * qtd);

e isso não tem nenhum problema , porém colocando apenas uma vez essa Linha creio que ficaria mais bem organizado ,  e então seu código com algumas modificações poderia ser assim  :

#include<stdlib.h>
#include<windows.h>
#include<stdio.h>
#include<conio.h>
#include<locale.h>
void desenha(int , int , int *caract,int ,int);
void gotoxy_2(int,int);
int carac2[77]={
  124 , 130 , 130 , 126 ,   2 , 130 , 124 , /* Digito 9 */ // 01111100 --|
  124 , 130 , 124 , 130 , 130 , 130 , 124 , /* Digito 8 */ // 10000010   |
  254 ,   2 ,  12 ,  16 ,  96 ,  64 ,  64 , /* Digito 7 */ // 10000010   |
  124 , 128 , 188 , 194 , 130 , 130 , 124 , /* Digito 6 */ // 01111110   |-- Digito Nove
  252 , 128 , 252 ,   2 ,   2 , 130 , 124 , /* Digito 5 */ // 00000010   |
   28 ,  36 ,  68 , 132 , 252 ,   4 ,  62 , /* Digito 4 */ // 10000010   |
  124 , 130 ,   2 ,  28 ,   2 , 130 , 124 , /* Digito 3 */ // 01111100 --|
  124 , 130 ,   2 ,  28 ,  96 , 128 , 252 , /* Digito 2 */
   16 , 112 ,  16 ,  16 ,  16 ,  16 , 124 , /* Digito 1 */
   56 ,  68 , 138 , 146 , 162 ,  68 ,  56 , /* Digito 0 */
   00 ,  00 , 000 , 000 , 000 ,  00 ,  00   /* Digito   */
  };
int main()
{
    int qtd, item;   //declarar variaveis
    float total=0,preco;
    setlocale(LC_ALL,"portuguese_Brasil_1252");  //permitir acentuação
    do
    {
        printf("                                                     \n");  //menu
        printf(" ___________________________________________________ \n");
        printf("| Item|  Produto         | Código |  Preço Unitário |\n");
        printf("|  1  | Cachorro-quente  |  100   |      5,00       |\n");
        printf("|  2  | X-Salada         |  101   |      8,79       |\n");
        printf("|  3  | X-Bacon          |  102   |      9,99       |\n");
        printf("|  4  | Misto            |  103   |      6,89       |\n");
        printf("|  5  | Salada           |  104   |      4,80       |\n");
        printf("|  6  | Água             |  105   |      3,49       |\n");
        printf("|  7  | Refrigerante     |  106   |      4,99       |\n");
        printf("|_____|__________________|________|_________________|\n");
        //permitir escolha de varios itens
        //escolha do pedido e quantidade
        printf("Escolha um item: ");
        item = getch()-48;  // getc pega uma tecla do teclado sem pressionar enter
        printf("%d\n",item);// para ver qual tecla pressionou 
        //armazenar os dados dos pedidos
        switch( item )
        {
        case 1: //cachorro-quente
            printf("Digite a quantidade: ");
            scanf("%d", &qtd);
            preco = 5;
            break;
        case 2: //x-salada
            printf("Digite a quantidade: ");
            scanf("%d", &qtd);
            preco = 8.79;
            break;
        case 3: //x-bacon
            printf("Digite a quantidade: ");
            scanf("%d", &qtd);
            preco = 9.99;
            break;
        case 4: //misto
            printf("Digite a quantidade: ");
            scanf("%d", &qtd);
            preco = 6.89;
            break;
        case 5: //salada
            printf("Digite a quantidade: ");
            scanf("%d", &qtd);
            preco = 4.8;
            break;
        case 6: //agua
            printf("Digite a quantidade: ");
            scanf("%d", &qtd);
            preco = 3.49;
            break;
        case 7: //refrigerante
            printf("Digite a quantidade: ");
            scanf("%d", &qtd);
            preco = 4.99;
            break;
        default://finalizar ao digitar um numero diferente de 1-7
            printf("\n Pedido finalizado\n valor total = %.2f\n\n", total);
        }
        total = total + preco * qtd;
    }while ( item > 0  && item < 8 );

    int w,px,py,x,j;                          /* variáveis simples                                */
    HANDLE h;                                 /* controle dos dispositivos do pc                  */
    HBITMAP hb;
    long lg;
    h = GetStdHandle( STD_OUTPUT_HANDLE );    /* pega a saída padrão                              */
    CONSOLE_SCREEN_BUFFER_INFO csbi;          /* informações sobre a buffer da tela               */
    GetConsoleScreenBufferInfo( h , &csbi);   /* pega a posição do cursor do console              */
    GetBitmapBits( hb, lg, NULL );
    px = csbi . dwCursorPosition.X;           /* pX será a posição da coluna do cursor no console */
    py = csbi . dwCursorPosition.Y;           /* pY será a posição da linha do cursor no console  */
    gotoxy_2(0,py+20);
    gotoxy_2(0,py+2 );
    for( j=0; j<11; j++ )
        desenha(40,py,carac2,j,j);            /* são os dígitos                                   */
    printf("\n\n\n\n");

	//system("pause");
	printf("\n\n\n");
	return 512;
}
void desenha(int co_i, int li_i, int caract[],int w,int j)
{
    int x,y,q,co,li;
    li=li_i;
    w *= 7;
    for(x=0;x<7;x++)                  /* linhas */
    {
        co=co_i;
        q=caract[x+w];
        for(y=0;y<16;y += 2)              /* colunas */
        {
            gotoxy_2(co,li);
            if(q % 2==0)printf("  ");
            else   printf("%c%c",219,219);
            co -= 2;
            q/=2;
        }
        li++;
    }
    gotoxy_2(70,li_i+7);
    if(j<10)Sleep(1000);
}
void gotoxy_2(int coluna, int linha){/*imprimir na linha e coluna desejada */
  SetConsoleCursorPosition( GetStdHandle(STD_OUTPUT_HANDLE),(COORD){coluna,linha});
}

 

  • Obrigado 1
Postado

@devair1010 muito obrigado pela ajuda mas faz pouco tempo que comecei a estudar, não consegui entender quase nada, não conheço essas bibliotecas e essas funções então fica muito confuso para mim

  • Obrigado 1
Postado

@V!OLADOR @devair1010 tentei fazer a tabela no final, não entendo muito de strings pode me ajudar? acho que tenho que adicionar um for em algum lugar, só sei que está bem errado kkk

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

int main()
{
	//declarar variaveis
	int qtd=0, item=1;
	float total, vu;
	char pdt[6][20];
	pdt[1] = 'Cachorro - quente';
	pdt[2] = 'X- Salada';
	pdt[3] = 'X-Bacon';
	pdt[4] = 'Misto';
	pdt[5] = 'Salada';
	pdt[6] = 'Água';
	pdt[7] = 'Refrigerante';
	
	//permitir acentuação
	setlocale(LC_ALL, "Portuguese");
	
	//menu
	printf("\n");
	printf(" ___________________________________________________\n");
	printf("| Item|  Produto         | Código |  Preço Unitário |\n");
	printf("|  1  | Cachorro-quente  |  100   |      5,00       |\n");
	printf("|  2  | X-Salada         |  101   |      8,79       |\n");
	printf("|  3  | X-Bacon          |  102   |      9,99       |\n");
	printf("|  4  | Misto            |  103   |      6,89       |\n");
	printf("|  5  | Salada           |  104   |      4,80       |\n");
	printf("|  6  | Água             |  105   |      3,49       |\n");
	printf("|  7  | Refrigerante     |  106   |      4,99       |\n");
	printf("|_____|__________________|________|_________________|\n");

	//permitir escolha de varios itens
	while ((item >= 1) && (item <= 7))
	{
		//escolha do pedido e quantidade
		printf("Escolha um item: ");
		scanf_s("%d", &item);

		//armazenar os dados dos pedidos
		switch (item) 
		{

		case 1: //cachorro-quente
			printf("Digite a quantidade: ");
			scanf_s("%d", &qtd);
			vu = 5.00;
			break;

		case 2: //x-salada
			printf("Digite a quantidade: ");
			scanf_s("%d", &qtd);
			vu = 8.79;
			break;

		case 3: //x-bacon
			printf("Digite a quantidade: ");
			scanf_s("%d", &qtd);
			vu = 9.99;
			break;

		case 4: //misto
			printf("Digite a quantidade: ");
			scanf_s("%d", &qtd);
			vu = 6.89;
			break;

		case 5: //salada
			printf("Digite a quantidade: ");
			scanf_s("%d", &qtd);
			vu = 4.80;
			break;

		case 6: //agua
			printf("Digite a quantidade: ");
			scanf_s("%d", &qtd);
			vu = 3.49;
			break;

		case 7: //refrigerante
			printf("Digite a quantidade: ");
			scanf_s("%d", &qtd);
			vu = 4.99;
			break;
		default://finalizar ao digitar um numero diferente de 1-7
			printf("\n Pedido finalizado \n Item   Produto   Preço unitário  Valor Total\n");
			total = total + vu * qtd;
			printf("%d     %s          %.2f        %.2f", &item, &pdt, &vu, &total);
			item=(item > 1) && (item < 7);
			break;
		}
	}
	system("pause");
	return 0;

 

  • Obrigado 1
  • Solução
Postado

 @Battata

 

Teve ideia de como armazenar os dados dos pedidos?

#include<stdlib.h>
#include<stdio.h>
#include<locale.h>

//tipo de dado tipo descritivo
typedef int    refeicao;
typedef float  reais;

int main (void)
{
	//declarar variaveis e inicializar com padrão
	refeicao quantidade= 0, item= 0; reais total= .0f;

	//permitir acentuação
	setlocale(LC_ALL, "Portuguese");
	
	//menu de lanches; variavel ponteiro  [indexavel] de tipo char e strings literais
	enum lanches {B_S= 0x0, CAB, I01, I02, I03, I04, I05, I06, I07, B_I};//constantes
	char *menu_lanches [0xA]= {
	        [B_S]= " ___________________________________________________ \n",
	        [CAB]= "| Item|  Produto         | Código |  Preço Unitário |\n",
	        [I01]= "|  1  | Cachorro-quente  |  100   |      5,00       |\n",
	        [I02]= "|  2  | X-Salada         |  101   |      8,79       |\n",
	        [I03]= "|  3  | X-Bacon          |  102   |      9,99       |\n",
	        [I04]= "|  4  | Misto            |  103   |      6,89       |\n",
	        [I05]= "|  5  | Salada           |  104   |      4,80       |\n",
	        [I06]= "|  6  | Água             |  105   |      3,49       |\n",
	        [I07]= "|  7  | Refrigerante     |  106   |      4,99       |\n",
	        [B_I]= "|_____|__________________|________|_________________|\n",
	};
	//exibir menu
	printf("\n");
	printf("%s", menu_lanches [B_S]); //borda superior
	printf("%s", menu_lanches [CAB]); //cabecalho
	printf("%s", menu_lanches [I01]); //item 01
	printf("%s", menu_lanches [I02]);
	printf("%s", menu_lanches [I03]);
	printf("%s", menu_lanches [I04]); // ...
	printf("%s", menu_lanches [I05]);
	printf("%s", menu_lanches [I06]);
	printf("%s", menu_lanches [I07]); //item 07
	printf("%s", menu_lanches [B_I]); //borda inferior
	//permitir escolha de varios itens

	while ((1 <= item) && (item <= 7))
	{
		//escolha do pedido e quantidade
		printf("Escolha um item: ");
		scanf_s("%d", &item);

		//armazenar os dados dos pedidos [## COMO ???????]
		switch (CAB + item)

 

Cada refeição ou ‘item’ de 'menu' é um número inteiro entre 1 e 7, como armazenar um pedido? Pedido é a quantidade solicitada para de cada uma das refeições, se existe sete refeições como contabilizar separadamente cada um?

 

Sugestão: use um vetor de refeição.

  • Obrigado 2
Postado

@Battata

 

Reagiu mais não falou nada! Ficou claro que pedido é vetor de int? Que os índices (1 a 7) em pedido corresponde a variável de valor da quantidade de  'item'  pedidos? Por exemplo, 

//adicionar 'quantidade' de 'item' no 'pedido'
pedido [item]= quantidade;
break;

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!