Porque é que este programa exibir caracteres aparentemente aleatórios? (C ++)
-
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?
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 char
s comuns que são ASCII caracteres com códigos de 0 a 255.
Ao imprimir wchar_t
s 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.