×
Ir ao conteúdo
  • Cadastre-se

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


Battata
Ir à solução Resolvido por mauro_b,

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

43 minutos atrás, Battata disse:

pdt[1] = 'Cachorro - quente';

Isso está incorreto em C só é válido em C++, a maneira correta seria copiando os caracteres com strcpy.

 

strcpy pertence a biblioteca string.h

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Solução

 @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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

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

minicurso-montagem-popup.jpg

MINICURSO GRÁTIS!

Como ganhar dinheiro montando computadores!

CLIQUE AQUI E INSCREVA-SE AGORA MESMO!