Ir ao conteúdo
  • Cadastre-se

C Matriz imprimindo uma letra a mais.


Lucas Pelepek
Ir à solução Resolvido por malloc_,

Posts recomendados

bom dia/tarde/noite.
 

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

void main()
{
  int c, anda, numero, x,y,cod,z ,num;
  y=0;
  cod=0;
  char portas[100];
  char matrizcopia[1000][1000];

  while( 1 ) // 1 faz ser loop eterno
  {
    while (1)// loop pra verificar se está dentro dos limites
    {
      printf("Escreva o numero de andares e quanto numeros jogara:\n");
      scanf( "%d %d", &anda, &numero );

      if ( (anda <= 100 && anda >= 1) && (numero <=200 && numero >= 1) || (anda == 0 && numero == 0) )
      {
        y+=anda;
        break;
      }}
      if( anda == 0 && numero == 0 ) // sai do loop caso 0 0
      {
        break;
      }
      for( c=0; c<anda; c++ ) // zera o vetor
      {
        portas[c] = 0;
      }
      for( c=0; c<numero; c++ ) // le as jogados de acordo com o numero lido antes
      {
        printf("\njogada(%d): ",c+1);
        scanf( "%d", &num );

        for( x=num-1; x<anda; x+=num )// inverte o vetor nas portas calculadas
        {
          portas[x] = !portas[x];
        }}
        for (int i = 0; i <= anda; i++) {
          matrizcopia[cod][i]=(portas[i] ? 'O' : 'C');
        }
        cod+=1;
      }

      for (int z = 0; z <= cod; z++) {
        printf("\n");
        for (int i = 0; i < 200; i++) {
          printf("%c",matrizcopia[z][i]);
        }}}

colocando esse imput:
5 3
3

4

2

0 0

 

o resultado deveria dar:

COOCC

 

porém no meu codigo ele adciona uma letra a mais:

COOCCO

 

não importa qual imput.


não consigo achar por onde essa letra tá entrando, HELP!

 

obrigado desde já.
 

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

  • Solução

Cara eu preciso ver seu código melhor quando eu tiver mais tempo, mas batendo o olho eu te aconselho a procurar algo no laço de repetição. Será que esse caractere a mais não tem a ver com incremento?

 

Ou isso aqui ?

 for (int i = 0; i <= anda; i++) {
          matrizcopia[cod][i]=(portas[i] ? 'O' : 'C');
        }
        cod+=1;
      }

eu acho que tu não definiu a variável i:

 int c, anda, numero, x,y,cod,z ,num;
  y=0;
  cod=0;
  char portas[100];
  char matrizcopia[1000][1000];

 

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

opa, a variavel ( i ) já está sendo inicializada no proprio FOR, mesmo colocando ela lá em cima dá o mesmo resultado.

 

mas como você disse:
era só ter mudado o anda.

for (int i = 0; i <= (anda-1); i++) {
          matrizcopia[cod][i]=(portas[i] ? 'O' : 'C');
        }
        cod+=1;
      }

outra mudança pra não ter espaço entre os outputs:

 for (int i = 0; i < strlen(matrizcopia[z]) ; i++) {
          printf("%c",matrizcopia[z][i]);
        }}}

o unico problema é que está tendo 2 linhas puladas no final, não sei de onde elas vem, mas obrigado pela ajuda.

 

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

void main()
{
  int c, anda, numero,i, x,y,cod,z ,num;
  y=0;
  cod=0;
  char portas[100];
  char matrizcopia[1000][1000];

  while( 1 ) // 1 faz ser loop eterno
  {
    while (1)// loop pra verificar se está dentro dos limites
    {
     // printf("Escreva o numero de andares e quanto numeros jogara:\n");
      scanf( "%d %d", &anda, &numero );

      if ( (anda <= 100 && anda >= 1) && (numero <=200 && numero >= 1) || (anda == 0 && numero == 0) )
      {
        y+=anda;
        break;
      }}
      if( anda == 0 && numero == 0 ) // sai do loop caso 0 0
      {
        break;
      }
      for( c=0; c<anda; c++ ) // zera o vetor
      {
        portas[c] = 0;
      }
      for( c=0; c<numero; c++ ) // le as jogados de acordo com o numero lido antes
      {
        //printf("\njogada(%d): ",c+1);
        scanf( "%d", &num );

        for( x=num-1; x<anda; x+=num )// inverte o vetor nas portas calculadas
        {
          portas[x] = !portas[x];
        }}
        for ( i = 0; i <= (anda-1); i++) {
          matrizcopia[cod][i]=(portas[i] ? 'O' : 'C');
        }
        cod+=1;
      }

      for (z = 0; z <= cod; z++) {

        for ( i = 0; i < strlen(matrizcopia[z]) ; i++) {
          printf("%c",matrizcopia[z][i]);
        }
         printf("\n");
      }}


 

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

Pega isso:

  for (z = 0; z <= cod; z++) {

        for ( i = 0; i < strlen(matrizcopia[z]) ; i++) {
          printf("%c",matrizcopia[z][i]);
        }
         printf("\n");
      }}

E muda pra isso e ve se resolve:

  for (z = 0; z <= cod; z++) {

        for ( i = 0; i < strlen(matrizcopia[z]) ; i++) {
          printf("\n%c",matrizcopia[z][i]);
        }
      
      }}

 

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!