Ir ao conteúdo
  • Cadastre-se

C Os valores do vetor estão errados


CadeOLink

Posts recomendados

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

void pedidos(int v[], int cont){


printf("===========================================\n");
printf("   n=%i        Pedidos\n",cont+1);
printf("===========================================\n");
printf("1.File = %i\n", v[0]);
printf("2.Coracao = %i\n", v[1]);
printf("3.Cupim = %i\n", v[2]);
printf("4.Medalhao de Frango = %i\n", v[3]);
printf("5.Medalhao de File = %i\n", v[4]);
printf("6.Picanha = %i\n", v[5]);
printf("7.Contra file = %i\n", v[6]);
printf("8.Alcatra = %i\n", v[7]);
printf("9.Porco = %i\n", v[8]);
printf("10.Carneiro = %i\n", v[9]);
printf("11.Frango = %i\n", v[10]);
printf("12.Peito de frango  = %i\n", v[11]);
printf("13.Linguiça = %i\n", v[12]);
printf("===========================================\n");
}

int main(){
 //Variaveis 
 int vtemp[12], vresul[12];
 int Ncomandas;
 int whl = 0;
 
    for(int x=0; x!=13; x++){
        vtemp[x] = 0;
        vresul[x] = 0;
    }
 
 //Quantia de comandas 
 printf("Inseria a quantia de comandas: ");
 scanf("%i",&Ncomandas);
 
for(int cont=0; cont<Ncomandas; cont++){
    whl = 0;

    system("clear");

    pedidos(vtemp,cont);

    while(whl != 20){
        printf("Digite '20' para finalizar a comanda");
        printf("\nDigite o item:");
        scanf("%i",&whl);

        if(whl<0){
            whl *= -1;
            vtemp[whl-1]--;
        }
        else{
        vtemp[whl-1]++;
        }
        system("clear");
        pedidos(vtemp,cont);
       /*for(int x=0; x!=13; x++){
        printf("vetor[%i]=%i\n",x,vtemp[x]);
        printf("vetorRes[%i]=%i\n",x,vresul[x]);
    }*/

    }

    for(int x=0; x<13; x++){
        vresul[x] += vtemp[x];
        vtemp[x] = 0;
    }

    }

    system("clear");
  pedidos(vresul,0);
   /*for(int x=0; x!=13; x++){
        printf("vetor[%i]=%i\n",x,vtemp[x]);
        printf("vetorRes[%i]=%i\n",x,vresul[x]);
    }*/

}

Estou fazendo um programa em C para contabilizar as quantias de pedidos de um restaurante e estava dando tudo certo até a hora que coloquei um vetor soma, onde soma todos os valores incluso no vetor temporário, onde o nome já diz temporário.    

Codigo.txt

 


 

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

@CadeOLink    vi dois errinhos e os números do vetor estão certos , aqui :

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
#include <Windows.h>
void pedidos( int v[], int );
int main()
{
    setlocale("LC","W - ALL");
    //Variaveis
    int vtemp[12] = {0}, vresul[12] = {0};
    int Ncomandas;
    int whl = 0,x,cont;
    /*for( x=0; x!=13; x++)
    {
        vtemp[x] = 0;
        vresul[x] = 0;
    }*/
    //Quantia de comandAs
    printf("Inseria a quantia de comandAs: ");
    scanf("%i",&Ncomandas);
    for( cont=0; cont<Ncomandas; cont++)
    {
        whl = 0;
        system("clear||cls");
        pedidos(vtemp,cont);
        while(whl != 20)
        {
            printf("Digite '20' para finalizar a comandA");
            printf("\nDigite o item:");
            scanf("%i",&whl);
            if(whl<0)
            {
                whl *= -1;
                vtemp[whl-1]--;
            }
            else
            {
                vtemp[whl-1]++; // aqui hum erro ,
            }                   // whl valendo zero e menos um
            system("clear||cls"); // vai valer -1 , e não tem essa posição do vetor
            pedidos(vtemp,cont);
            /*for(int x=0; x!=13; x++){
            printf("vetor[%i]=%i\n",x,vtemp[x]);
            printf("vetorRes[%i]=%i\n",x,vresul[x]);
            }*/
        }
        for( x=0; x<13; x++)
        {
            vresul[x] += vtemp[x];
            vtemp[x] = 0;
        }
    }
    system("clear||cls");
    printf("vetor Vresul\n->");
    pedidos(vresul,0);
    /*for(int x=0; x!=13; x++){
    printf("vetor[%i]=%i\n",x,vtemp[x]);
    printf("vetorRes[%i]=%i\n",x,vresul[x]);
    }*/
    return 0;
}
void pedidos(int v[], int cont)
{
    printf("===========================================\n");
    printf("|   n=%i   Pedidos\t\t\t  |\n", cont + 1      );
    printf("===========================================\n");
    printf(" 1 . File --------------= %i\n", v[ 0]        );
    printf(" 2 . Coracao -----------= %i\n", v[ 1]        );
    printf(" 3 . Cupim -------------= %i\n", v[ 2]        );
    printf(" 4 . Medalhao de Frango = %i\n", v[ 3]        );
    printf(" 5 . Medalhao de File --= %i\n", v[ 4]        );
    printf(" 6 . Picanha -----------= %i\n", v[ 5]        );
    printf(" 7 . Contra file -------= %i\n", v[ 6]        );
    printf(" 8 . Alcatra -----------= %i\n", v[ 7]        );
    printf(" 9 . Porco -------------= %i\n", v[ 8]        );
    printf("10 . Carneiro ----------= %i\n", v[ 9]        );
    printf("11 . Frango ------------= %i\n", v[10]        );
    printf("12 . Peito de frango ---= %i\n", v[11]        ); // v sóh vai de zero até 11 mesmo !
    printf("13 . Lingui%ca ----------= %i\n", 135 , v[12] ); // Não existe o v12 nesse caso !
    printf("===========================================\n");
}

 

Link para o comentário
Compartilhar em outros sites

9 minutos atrás, devair1010 disse:

@CadeOLink    vi dois errinhos e os números do vetor estão certos , aqui :

#include <stdio.h>
#include <stdlib.h>
#include <iomanip>
#include <string.h>
#include <Windows.h>
void pedidos( int v[], int );
int main()
{
    //Variaveis
    int vtemp[12] = {0}, vresul[12] = {0};
    int Ncomandas;
    int whl = 0,x,cont;
    /*for( x=0; x!=13; x++)
    {
        vtemp[x] = 0;
        vresul[x] = 0;
    }*/
    //Quantia de comandas
    printf("Inseria a quantia de comandas: ");
    scanf("%i",&Ncomandas);
    for( cont=0; cont<Ncomandas; cont++)
    {
        whl = 0;
        system("clear||cls");
        pedidos(vtemp,cont);
        while(whl != 20)
        {
            printf("Digite '20' para finalizar a comanda");
            printf("\nDigite o item:");
            scanf("%i",&whl);
            if(whl<0)
            {
                whl *= -1;
                vtemp[whl-1]--;
            }
            else
            {
                vtemp[whl-1]++; // aqui hum erro ,
            }                   // whl valendo zero e menos um
            system("clear||cls"); // vai valer -1 , e não tem essa posição do vetor
            pedidos(vtemp,cont);
            /*for(int x=0; x!=13; x++){
            printf("vetor[%i]=%i\n",x,vtemp[x]);
            printf("vetorRes[%i]=%i\n",x,vresul[x]);
            }*/
        }
        for( x=0; x<13; x++)
        {
            vresul[x] += vtemp[x];
            vtemp[x] = 0;
        }
    }
    system("clear||cls");
    printf("vetor Vresul\n->");
    pedidos(vresul,0);
    /*for(int x=0; x!=13; x++){
    printf("vetor[%i]=%i\n",x,vtemp[x]);
    printf("vetorRes[%i]=%i\n",x,vresul[x]);
    }*/
    return 0;
}
void pedidos(int v[], int cont)
{
    printf("===========================================\n");
    printf("|   n=%i   Pedidos\t\t\t  |\n", cont + 1      );
    printf("===========================================\n");
    printf(" 1.File --------------= %i\n", v[ 0]          );
    printf(" 2.Coracao -----------= %i\n", v[ 1]          );
    printf(" 3.Cupim -------------= %i\n", v[ 2]          );
    printf(" 4.Medalhao de Frango = %i\n", v[ 3]          );
    printf(" 5.Medalhao de File --= %i\n", v[ 4]          );
    printf(" 6.Picanha -----------= %i\n", v[ 5]          );
    printf(" 7.Contra file -------= %i\n", v[ 6]          );
    printf(" 8.Alcatra -----------= %i\n", v[ 7]          );
    printf(" 9.Porco -------------= %i\n", v[ 8]          );
    printf("10.Carneiro ----------= %i\n", v[ 9]          );
    printf("11.Frango ------------= %i\n", v[10]          );
    printf("12.Peito de frango ---= %i\n", v[11]          ); // v sóh vai de zero até 11 mesmo !
    printf("13.Linguiça ----------= %i\n", v[12]          ); // Não existe o v12 nesse caso !
    printf("===========================================\n");
}

 

 

Ainda ocorre o mesmo erro. Sem você ad nenhum valor em v[7] ele aparece 1 e se você add qualquer valor em v[0] esse valor vai para v[12].

 

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

38 minutos atrás, devair1010 disse:

@CadeOLink   aqui está certo veja:

1690871408_vetorerros2.jpg.a8be0dbfb3a0fd64c09cf2205d970ed8.jpg

o v[12] está errado mesmo , por que não existe essa posição nesse vetor , assim ele mostra hum valor desconhecido ,

Então o problema seja no meu compilador.

Uso um compilador online: https://www.onlinegdb.com/

1 hora atrás, devair1010 disse:
vtemp[whl-1]++; // aqui hum erro ,
            }                   // whl valendo zero e menos um
            system("clear||cls"); // vai valer -1 , e não tem essa posição do vetor

Não há erro porque assim que ele digitar 1 vai ser 1-1 = 0 que esse zero vai entrar no v[0] justo a numeração do item 1

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

2 horas atrás, CadeOLink disse:

Ainda ocorre o mesmo erro. Sem você ad nenhum valor em v[7] ele aparece 1 e se você add qualquer valor em v[0] esse valor vai para v[12].

Você tem que iniciar o vetor preenchendo todas as posições com 0, para fazer isso em C basta declarar dessa maneira

	/* Declara um vetor com o nome de meu vetor de 13 posições iniciadas com 0 */
	int meu_vetor[13] = {0};	/* {0} indica que todas as posições serão iniciadas com 0 */

Quando você cria um vetor de 13 posições ele vai começar em 0 e terminar em 12 totalizando 13 posições, a posição 13 não existe porque aí já seria 14 posições.

1 hora atrás, CadeOLink disse:

Então o problema seja no meu compilador.

Uso um compilador online: https://www.onlinegdb.com/

Esse é muito bom, mas você tem que prestar atenção na configuração, ele tem que estar configurado para C não para C++.

Para checar as configurações vá na caixa language e selecione C (Não selecione C(TurboC)) para configurar corretamente.

Eu dou preferência a usar esse outro aqui replit.

 

Você deveria dar nomes mais significativos para as variáveis e separa melhor o seu algoritmo em pedaços (funções) para ficar mais fácil de ler.

 

Eu adaptei esse meu algoritmo que eu fiz ontem para deixar de exemplo

Spoiler
#include <stdio.h>
#include <string.h>

#define T_NOME 256
#define Q_PRODUTOS 13

struct produto
{
    char nome[T_NOME];
    float preco;
};

struct produto lista_produtos[Q_PRODUTOS] = {
    {"File", 17.90},
    {"Coracao", 13.40},
    {"Cupin",14.40},
    {"Medalhao de frango", 12.29},
    {"Medalhao de file", 29.34},
    {"Picanha", 34.70},
    {"Contra file", 22.40},
    {"Alcatra", 19.90},
    {"Porco", 15.50},
    {"Carneiro", 23.50},
    {"Frango", 7.99},
    {"Peito de frango", 6.99},
    {"Linguica", 5.00}
};

void listaPedidos(struct produto *produtos, int quantidade, int *pedidos);

int menuProdutos(struct produto *produtos, int quantidade, char *nome);

int main(void)
{
    int pedidos[Q_PRODUTOS] = {0};       /* Inicia todas as posições com 0 */
    int opcao, n_pedido;
    do {
        /* Menu principal */
        printf("1-Fazer pedido\n");
        printf("2-Listar pedidos\n");
        printf("0-Sair\n");
        scanf("%d%*c", &opcao);
        switch (opcao) {
            case 1:
                n_pedido = menuProdutos(lista_produtos, Q_PRODUTOS, "Selecione o produto desejado");
                if (n_pedido > 0) {
                    pedidos[n_pedido-1]++;
                }
                break;

            case 2:
                listaPedidos(lista_produtos, Q_PRODUTOS, pedidos);
                printf("Pressione enter para continuar\n");
                getchar();
        }
    } while (opcao != 0);
    return(0);
}

void listaPedidos(struct produto *produtos, int quantidade, int *pedidos)
{
    int contador1,contador2;
    printf("Nome\t\tQuantidade\tPreco\tTotal\n");
    for (contador1 = 0; contador1 < quantidade; contador1++) {
        printf("%d-%s", contador1+1, produtos[contador1].nome);
        if (contador1 < 9) {
            for (contador2 = strlen(produtos[contador1].nome); contador2 < 20; contador2++) {
                putchar('_');
            }
        } else {
            for (contador2 = strlen(produtos[contador1].nome)+1; contador2 < 20; contador2++) {
                putchar('_');
            }
        }
        if (pedidos[contador1] > 0) {
            printf(":%dx%.2f:%.2f\n",pedidos[contador1], produtos[contador1].preco, produtos[contador1].preco*pedidos[contador1]);
        } else {
            printf(":%d\n",pedidos[contador1]);
        }
    }
}

int menuProdutos(struct produto *produtos, int quantidade, char *nome)
{
    int opcao = 0;
    do {
        int contador;
        printf("\t%s\n", nome);
        for (contador = 0; contador < quantidade; contador++) {
            printf("%d-%s:\t%.2f\n", contador+1, produtos[contador].nome, produtos[contador].preco);
        }
        printf("Digite 0 para sai ou escolha uma opcao acima:");
        scanf("%d%*c", &opcao);
        if (opcao < 0 || opcao > quantidade) {
            printf("Opcao invalida!");
        }
    } while (opcao < 0 || opcao > quantidade);
    return(opcao);
}

 

De uma estudada nele.

Link para o comentário
Compartilhar em outros sites

12 minutos atrás, kgin disse:

Você tem que iniciar o vetor preenchendo todas as posições com 0, para fazer isso em C basta declarar dessa maneira

	/* Declara um vetor com o nome de meu vetor de 13 posições iniciadas com 0 */
	int meu_vetor[13] = {0};	/* {0} indica que todas as posições serão iniciadas com 0 */

Quando você cria um vetor de 13 posições ele vai começar em 0 e terminar em 12 totalizando 13 posições, a posição 13 não existe porque aí já seria 14 posições.

Esse é muito bom, mas você tem que prestar atenção na configuração, ele tem que estar configurado para C não para C++.

Para checar as configurações vá na caixa language e selecione C (Não selecione C(TurboC)) para configurar corretamente.

Eu dou preferência a usar esse outro aqui replit.

 

Você deveria dar nomes mais significativos para as variáveis e separa melhor o seu algoritmo em pedaços (funções) para ficar mais fácil de ler.

 

Eu adaptei esse meu algoritmo que eu fiz ontem para deixar de exemplo

  Ocultar conteúdo
#include <stdio.h>
#include <string.h>

#define T_NOME 256
#define Q_PRODUTOS 13

struct produto
{
    char nome[T_NOME];
    float preco;
};

struct produto lista_produtos[Q_PRODUTOS] = {
    {"File", 17.90},
    {"Coracao", 13.40},
    {"Cupin",14.40},
    {"Medalhao de frango", 12.29},
    {"Medalhao de file", 29.34},
    {"Picanha", 34.70},
    {"Contra file", 22.40},
    {"Alcatra", 19.90},
    {"Porco", 15.50},
    {"Carneiro", 23.50},
    {"Frango", 7.99},
    {"Peito de frango", 6.99},
    {"Linguica", 5.00}
};

void listaPedidos(struct produto *produtos, int quantidade, int *pedidos);

int menuProdutos(struct produto *produtos, int quantidade, char *nome);

int main(void)
{
    int pedidos[Q_PRODUTOS] = {0};       /* Inicia todas as posições com 0 */
    int opcao, n_pedido;
    do {
        /* Menu principal */
        printf("1-Fazer pedido\n");
        printf("2-Listar pedidos\n");
        printf("0-Sair\n");
        scanf("%d%*c", &opcao);
        switch (opcao) {
            case 1:
                n_pedido = menuProdutos(lista_produtos, Q_PRODUTOS, "Selecione o produto desejado");
                if (n_pedido > 0) {
                    pedidos[n_pedido-1]++;
                }
                break;

            case 2:
                listaPedidos(lista_produtos, Q_PRODUTOS, pedidos);
                printf("Pressione enter para continuar\n");
                getchar();
        }
    } while (opcao != 0);
    return(0);
}

void listaPedidos(struct produto *produtos, int quantidade, int *pedidos)
{
    int contador1,contador2;
    printf("Nome\t\tQuantidade\tPreco\tTotal\n");
    for (contador1 = 0; contador1 < quantidade; contador1++) {
        printf("%d-%s", contador1+1, produtos[contador1].nome);
        if (contador1 < 9) {
            for (contador2 = strlen(produtos[contador1].nome); contador2 < 20; contador2++) {
                putchar('_');
            }
        } else {
            for (contador2 = strlen(produtos[contador1].nome)+1; contador2 < 20; contador2++) {
                putchar('_');
            }
        }
        if (pedidos[contador1] > 0) {
            printf(":%dx%.2f:%.2f\n",pedidos[contador1], produtos[contador1].preco, produtos[contador1].preco*pedidos[contador1]);
        } else {
            printf(":%d\n",pedidos[contador1]);
        }
    }
}

int menuProdutos(struct produto *produtos, int quantidade, char *nome)
{
    int opcao = 0;
    do {
        int contador;
        printf("\t%s\n", nome);
        for (contador = 0; contador < quantidade; contador++) {
            printf("%d-%s:\t%.2f\n", contador+1, produtos[contador].nome, produtos[contador].preco);
        }
        printf("Digite 0 para sai ou escolha uma opcao acima:");
        scanf("%d%*c", &opcao);
        if (opcao < 0 || opcao > quantidade) {
            printf("Opcao invalida!");
        }
    } while (opcao < 0 || opcao > quantidade);
    return(opcao);
}

 

De uma estudada nele.

Obrigado, vou estudar e colocar em pratica no meu

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