Ir ao conteúdo
  • Cadastre-se

C Não estou conseguindo zerar os valores do vetor


diogo moura

Posts recomendados

Bom dia, eu consegui desenvolver a logica da questão, o problema é que depois de mostrar os valores, eu tenho que apagar o que há no vetor, para não utilizar o resultado anterior  no próximo caso de teste

 

Link da questão

 

 

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

int main(void)
{
	int i, j, vetor[12], c = 0, teste, k;
	char nome[100];
	char primeiro[7] = {'a', 'k', 'u', 'G', 'Q'}, segundo[7] = {'b', 'l', 'v', 'I', 'S'};
	char terceiro[7] = {'E', 'O', 'Y', 'c', 'm', 'w'}, quarto[7] = {'F', 'P', 'Z', 'd', 'n', 'x'};
	char quinto[6] = {'J', 'T', 'e', 'o', 'y'}, sexto[7] = {'D', 'N', 'X', 'f', 'p', 'z'};
	char setimo[6] = {'A', 'K', 'U', 'g', 'q'}, oitavo[6] = {'C', 'M', 'W', 'h', 'r'};
	char nono[6] = {'B', 'L', 'V', 'i', 's'}, deimo[5] = {'H', 'R', 'j', 't'};

	scanf("%d", &teste);
	for(k = 0; k < teste; k++)
	{
		setbuf(stdin, NULL);
		gets(nome);
		int tam = strlen(nome);
		for(i = 0; i < tam; i++)
		{
			for(j = 0; j < 7; j++)
			{
				if(nome[i] == primeiro[j])
				{
					vetor[c++] = 0;
				}
			}
			for(j = 0; j < 7; j++)
			{
				if(nome[i] == segundo[j])
				{
					vetor[c++] = 1;
				}
			}
			for(j = 0; j < 7; j++)
			{
				if(nome[i] == terceiro[j])
				{
					vetor[c++] = 2;
				}
			}
			for(j = 0; j < 7; j++)
			{
				if(nome[i] == quarto[j])
				{
					vetor[c++] = 3;
				}
			}
			for(j = 0; j < 6; j++)
			{
				if(nome[i] == quinto[j])
				{
					vetor[c++] = 4;
				}
			}
			for(j = 0; j < 7; j++)
			{
				if(nome[i] == sexto[j])
				{
					vetor[c++] = 5;
				}
			}
			for(j = 0; j < 6; j++)
			{
				if(nome[i] == setimo[j])
				{
					vetor[c++] = 6;
				}
			}
			for(j = 0; j < 6; j++)
			{
				if(nome[i] == oitavo[j])
				{
					vetor[c++] = 7;
				}
			}
			for(j = 0; j < 6; j++)
			{
				if(nome[i] == nono[j])
				{
					vetor[c++] = 8;
				}
			}
			for(j = 0; j < 5; j++)
			{
				if(nome[i] == deimo[j])
				{
					vetor[c++] = 9;
				}
			}
		}
		for(i = 0; i < 12; i++)
		{
			printf("%d", vetor[i]);
		}
		printf("\n");
		for(i = 0; i < 12; i++)
		{
			vetor[i] = 0;
		}/* quando eu faço isso só o primeiro resultado é o certo,
			            os outros resultados são apenas zeros/*

	}
	return 0;
}

 

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

pra zerar um vetor/array você pode fazer assim --> 

 

ZeroMemory(vetor, 10); // o vetor a ser zerado e o tamanho dele em bytes

ou 

memset(vetor, 0, 10); // o vetor a ser preenchido, o vetor será preenchido com esse valor (0 no caso)
                      // e o tamanho do vetor em bytes

 

ambos fazem exatamente a mesma coisa, ZeroMemory é implementado com memset..

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

int main()
{
	int vetor[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

	memset(vetor, 0, sizeof(vetor));

	for ( size_t i = 0; i < sizeof(vetor) / 4; i++ )
	{
		std::cout << vetor[i] << std::endl;
	}

	system("pause");
	return 0;
}

compile isso e verá que o vetor é zerado.. o problema provavelmente é na sua implementação, mostre o source desse seu segundo exemplo, se puder.

 

 

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

Bom eu consegui zerar o vetor.

Olha ai imagem ai, só que o vetor não recebe mais valores, só fica mostrando zeros.

ojfsof.png.e180d6d996d690f943de2ea53fda9f2b.png

adicionado 2 minutos depois

Zerei o valor do vetor depois de mostrar na tela, vou colocar a parte do meu código que fiz a alteração

 

for(i = 0; i < 12; i++)
{
	printf("%d", vetor[i]);
}
printf("\n");
memset(vetor, 0, sizeof(vetor));

 

Será que utilizei memset(vetor, 0, sizeof(vetor)); no lugar errado? @Derleyvolt

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

o código está correto, primeiro ele mostra o conteúdo do vetor, ou seja, joga o conteúdo na tela e depois zera o valor.. essa seria a sua intenção, não? caso não, eu ainda entendi qual a real dúvida, a dúvida inicial era como zerar o conteúdo de um array/vetor.. poste o código completo com as alterações que você fez, e me diga como você espera/quer que ele funcione. tenho a noite toda, sem pressa.

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

Eu comentei o código, do que ele vai fazer.

 

/*Bom o objetivo dessa questão e que cada letra tem um determinado numero*/

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

int main(void)
{
	int i, j, vetor[100], c = 0, teste, k;  /*vetor[100] dando do tamanho vetor, c, contador para incrementar
	o valor, quando encontar uma letra que tem na frase dado a letra ele vai atriburi o valor para o vetor*/
	char nome[100];
	char primeiro[7] = {'a', 'k', 'u', 'G', 'Q'}, segundo[7] = {'b', 'l', 'v', 'I', 'S'};
	char terceiro[7] = {'E', 'O', 'Y', 'c', 'm', 'w'}, quarto[7] = {'F', 'P', 'Z', 'd', 'n', 'x'};
	char quinto[6] = {'J', 'T', 'e', 'o', 'y'}, sexto[7] = {'D', 'N', 'X', 'f', 'p', 'z'};
	char setimo[6] = {'A', 'K', 'U', 'g', 'q'}, oitavo[6] = {'C', 'M', 'W', 'h', 'r'};
	char nono[6] = {'B', 'L', 'V', 'i', 's'}, deimo[5] = {'H', 'R', 'j', 't'};

	//preenchendo o vetor com as letrar


	scanf("%d", &teste);
	for(k = 0; k < teste; k++)
	{
		setbuf(stdin, NULL);
		gets(nome);
		int tam = strlen(nome);
		for(i = 0; i < tam; i++)
		{
			for(j = 0; j < 7; j++)
			{
				if(nome[i] == primeiro[j])  /*aqui eu comparo se na frase tem determinada letra, se ela tiver
											vai ser atribuido um valor numerico para o vetor, c++, para incrementar*/
				{
					vetor[c++] = 0;
				}
			}
			for(j = 0; j < 7; j++)
			{
				if(nome[i] == segundo[j])
				{
					vetor[c++] = 1;
				}
			}
			for(j = 0; j < 7; j++)
			{
				if(nome[i] == terceiro[j])
				{
					vetor[c++] = 2;
				}
			}
			for(j = 0; j < 7; j++)
			{
				if(nome[i] == quarto[j])
				{
					vetor[c++] = 3;
				}
			}
			for(j = 0; j < 6; j++)
			{
				if(nome[i] == quinto[j])
				{
					vetor[c++] = 4;
				}
			}
			for(j = 0; j < 7; j++)
			{
				if(nome[i] == sexto[j])
				{
					vetor[c++] = 5;
				}
			}
			for(j = 0; j < 6; j++)
			{
				if(nome[i] == setimo[j])
				{
					vetor[c++] = 6;
				}
			}
			for(j = 0; j < 6; j++)
			{
				if(nome[i] == oitavo[j])
				{
					vetor[c++] = 7;
				}
			}
			for(j = 0; j < 6; j++)
			{
				if(nome[i] == nono[j])
				{
					vetor[c++] = 8;
				}
			}
			for(j = 0; j < 5; j++)
			{
				if(nome[i] == deimo[j])
				{
					vetor[c++] = 9;
				}
			}
		}
		for(i = 0; i < 12; i++)
		{
			printf("%d", vetor[i]);
		}
		printf("\n");  //mostro o vetor
		memset(vetor, 0, sizeof(vetor));
		/*Queria limpar o vetor para que eu pudese realizar os proximos testes*/
		/*Só que depois que o zero o valor do vetor ele não recebe mais nenhum valor*/

	}
	return 0;
}

@Derleyvolt

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

Okay.. primeiro, a variável contadora, c, precisa ser zerada..

           

segundo, dependendo do seu compilador, o vetor virá com lixo de memória, você precisa zerar ele, assim ->

 

int vetor[100] = {}; // isso zera o vetor. se tiver usando uma versão mais antiga, provavelmente não vai funcionar

ou 

int vetor[100];

memset(vetor, 0, sizeof(vetor));

 

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

@diogo moura Você quer fazer isso?

 

#include <cstdio>
#include <cstdlib>

#define TAMANHO 10

int main()
{
	int vetor[10] = { 1,1,1,1,1,1,1,1,1,1};


    printf("Vetor Inicial: ");
	for ( int i = 0; i < TAMANHO; i++ )
	  printf(" %d", vetor[i]);

	//zera vetor
	for ( int i = 0; i < TAMANHO; i++ )
	  vetor[i] = 0;

	printf("\n\nVetor Zerado: ");
	for ( int i = 0; i < TAMANHO; i++ )
	  printf(" %d", vetor[i]);

	return 0;
}

 

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

@diogo moura    o código está certo funciona bem,  mas o uri não aceita, pelo jeito é apenas um detalhe mínimo que ainda não percebemos o que é, tentei com esse outro código, mas também deu 10% de erro . esse código aqui :

#include <string.h>
#include <stdio.h>
int main(){
    char s[200];
    int n,i,k,l;
    scanf("%d",&n);
    while(n--){
        fflush(stdin);
        gets(s);
        l=strlen(s);
        for(i=0,k=0; i<l&&k<12; i++){
            if     (s[i]=='G'||s[i]=='Q'||s[i]=='a'||s[i]=='k'||s[i]=='u'           ) printf("0");
            else if(s[i]=='I'||s[i]=='S'||s[i]=='b'||s[i]=='l'||s[i]=='v'           ) printf("1");
            else if(s[i]=='E'||s[i]=='O'||s[i]=='Y'||s[i]=='c'||s[i]=='m'||s[i]=='w') printf("2");
            else if(s[i]=='F'||s[i]=='P'||s[i]=='Z'||s[i]=='d'||s[i]=='n'||s[i]=='x') printf("3");
            else if(s[i]=='J'||s[i]=='T'||s[i]=='e'||s[i]=='o'||s[i]=='y'           ) printf("4");
            else if(s[i]=='D'||s[i]=='N'||s[i]=='X'||s[i]=='f'||s[i]=='p'||s[i]=='z') printf("5");
            else if(s[i]=='A'||s[i]=='K'||s[i]=='U'||s[i]=='g'||s[i]=='q'           ) printf("6");
            else if(s[i]=='C'||s[i]=='M'||s[i]=='W'||s[i]=='h'||s[i]=='r'           ) printf("7");
            else if(s[i]=='B'||s[i]=='L'||s[i]=='V'||s[i]=='i'||s[i]=='s'           ) printf("8");
            else if(s[i]=='H'||s[i]=='R'||s[i]=='j'||s[i]=='t'                      ) printf("9");
            if(s[i]!=' ')
                k++;
        }
        printf("\n");
    }
    return 0;
}

@diogo moura    qual compilador você está usando ?  eu uso o codeblock que é bom , mas ele é todo em inglês, e pela imagem que você postou seu compilador parece ser em português , creio que seria  melhor .

Link para o comentário
Compartilhar em outros sites

@diogo moura Eu fiz a minha própria MyScanf usando fgetc( stdin ); Porém você pode usar qualquer uma dessas aí.

Quando tiver de conta a quantidade de caracteres capturados, não conte os espaços em braco, nesta conta não vale os caracteres de espaço.

32 minutos atrás, diogo moura disse:

você falou que Caracteres em branco não contam, como eu faria isso

Retire os espaços da string capturada, exemplo:

ENTRE: o rato roeu a roupa de margarida
GRAVE: oratoroeuaroupademargarida 

 

 

 

Spoiler: Código da Solução

 :thumbsup:

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