Ir ao conteúdo

C Matriz imprimindo uma letra a mais.


Ir à solução Resolvido por malloc_,

Posts recomendados

Postado

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
  • Solução
Postado

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
Postado

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
Postado

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
Postado

valeu, mas já tinha conseguido fazer assim: 

 

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

 

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