Ir para conteúdo
Fórum Script Brasil
  • 0

Programa C++ não tem erro de compilação, mas não roda


Castro

Pergunta

:mellow:

Considere o programa:

#include <iostream>
using namespace std;
char mostra_binario(unsigned int u);

int main()
{
    int i=1,t;
    
  //Deslocamento para esquerda
  
  for (t=0; t < 8; t++)
  {
      // Deslocamento para a esquerda de 'i' em uma posição
      mostra_binario(i);  
    i=i << 1;
  }
 cout << "\n";

 for (t=0; t < 8; t++)
  {
      // Deslocamento para a direita de 'i' em uma posição
      mostra_binario(i);  
    i=i >> 1;
  }
 cout << "\n";

system ("pause");    
return 0;
}

char mostra_binario(unsigned int u)
{
     char binario[8]={''},*bin[8],valor[8];
      
      int j;
      
// Aqui se usa ponteiro, pois itoa retorna um ponteiro para caracter
     *bin=itoa(u,binario,2);
     
     for(j=0; j <=8; j++)
     {
      valor[j] =*bin[j];
      cout << valor[j];
     }
      
    return valor[j];
}

Está dando a seguinte mensagem de erro:

<nome_executável> encontrou um problema e precisa ser fechado

Por que isto está acontecendo, se não erro de compilação ?

Obrigado

Editado por Castro
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

O compilador não irá mostrar todos os erros que acontecem...

Existem vários erros em que o compilador não mostra nada (às vezes um warning)

Por exemplo, tente escrever o seguinte programa:

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

int main ()
{
    printf("%s",10);
}
O compilador nem mesmo mostra um warning ! Tente fazer assim:
#include <iostream>
using namespace std;
char mostra_binario(unsigned int u);

int main()
{
    int i=1,t;
    
  //Deslocamento para esquerda
  
  for (t=0; t < 8; t++)
  {
      // Deslocamento para a esquerda de 'i' em uma posição
      mostra_binario(i);
    i=i << 1;
  }
cout << "\n";

for (t=0; t < 8; t++)
  {
      // Deslocamento para a direita de 'i' em uma posição
      mostra_binario(i);  
    i=i >> 1;
  }
cout << "\n";

system ("pause");    
return 0;
}
char mostra_binario(unsigned int u)
{
    char binario[32];
    int j;
    binario[0]=0;
      for (j=0;j<32;j++){
          binario[j]=0;
      }
     itoa(u,binario,2);
     
     for(j=0; j<32; j++)
     {
      cout << binario[j];
     }
    return binario[j];
}

Link para o comentário
Compartilhar em outros sites

  • 0
Deu certo, mas por que tive que dar o tamanho de 32 na variável binário e não 8 ? pois um byte tem 8 bits ?
Realmente, nem percebi (não faço a mínima idéia do porque fiz isso)

Na verdade o correto seria 9 (um byte pra marcar o fim da string)

a sua versão, itoa deu certo sem retornar ponteiros. Poderia comentar ? pois itoa retorna um ponteiro para char.

A função itoa, no seu segundo parâmetro, recebe o endereço da variável onde irá armazenar o resultado.

Contudo, você pode utilizar o retorno da função para fazer isso (não é a melhor forma de se fazer, já que você terá que declarar duas variáveis e o desempenho diminui um pouco com isso)

Olhe este código:

char binario,*binario2
binario2=itoa(u,binario,2);
As duas variáveis ficarão com o mesmo valor A função ficou assim com as modificações:
char mostra_binario(unsigned int u)
{
    char binario[9];
    int j;
      for (j=0;j<8;j++){
          binario[j]=0;
      }
    itoa(u,binario,2);
     
     for(j=0; j<8; j++)
     {
      cout << binario[j];
     }
     cout << "\n";
}

Qualquer dúvida posta aí !

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...