Porque é que este programa exibir caracteres aparentemente aleatórios? (C ++)

StackOverflow https://stackoverflow.com/questions/902309

  •  05-09-2019
  •  | 
  •  

Pergunta

Bem, não aleatório, porque é o mesmo cada vez, mas

#include<iostream>
using namespace std;
int main()
{
    char box[10][10];
    for(int i=-1;i<11;i++)
    {
        cout<<"---------------------"<<endl<<"|";
        for(int j=0;j<10;j++)
        {
            cout<<box[j][i]<<"|";
        }
        cout<<endl;
    }
    intx;cin>>x;
    return 0;
}

gera uma série de caracteres internacionais (bem, nem todos eles são 'internacional' per se, mas eu fazer as coisas como pi e ponto de interrogação invertido espanhol). De qualquer forma, eu sei que isso é becuase os caracteres acesso a programas que não tenham sido inicializadas, mas por que valores particulares criar símbolos específicos, quais são os valores ASCII dos símbolos (se eles têm valores ASCII) e como posso obter os símbolos sem glitching meu programa?

Foi útil?

Solução

O seu laço sobre i não faz sentido ...

for(int i=-1;i<11;i++)

Este vai bater dois índices que não são válidas, -1 e 10, quando você faz referência a caixa aqui:

cout<<box[j][i]<<"|";

Deve ser de 0 a <10 como o outro loop.

Além disso, você ainda não inicializado o conteúdo da caixa para nada, então você está imprimindo a memória não inicializada. Você tem que colocar algo em sua "caixa" antes que você possa tirar alguma coisa.

Os próprios símbolos provavelmente são estendidos ASCII, você pode chegar a eles através de qualquer tabela ASCII estendido. Este surgiu primeiro no google. Por exemplo, você poderia fazer:

cout << "My extended ascii character is: " << (char)162 << endl;

para obter um o internacional louco.

Outras dicas

Pela mesma razão que

#include <iostream>
using namespace std;
int main()
{
   int x;
   cout << x;
}

exibe um valor aleatório. variáveis ??uninitialised (ou matrizes) contêm lixo.

para (int i = -1; i <11; i ++)

Essa linha é suspeito. -1 a 10? Deve ser 0 a 9.

O código ASCII é

(int)(box[j][i])

Você só imprimir chars comuns que são ASCII caracteres com códigos de 0 a 255. Ao imprimir wchar_ts a mesma memória é interpretado como outros personagens.

O loop deve estar em [0; 10 [não em [-1; 11 [

Os símbolos exibida pelo programa dependem de:

  • o conteúdo que passa a ser nas variáveis ??uninitialised, e
  • o local do seu computador ou a codificação usada na apresentação.

REFERÊNCIA A Unicode seria provavelmente a melhor fonte para identificar os códigos necessários para exibir símbolos particulares.

Considere que seus usuários podem não ter a mesma codificação (ou fontes com os símbolos corretos) selecionados por padrão. Você deve ou verifique o local atual, ou forçar um específico para a sua saída para garantir a sua saída torna a maneira que você desejar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top