Ir ao conteúdo
  • Cadastre-se

C++ Problema em um codigo C++


Elias_sarges

Posts recomendados

Olá, estou com um pequeno problema, estou estudando C++, sou novo nessa linguagem e estou tentando criar um código de jogo da forca, queria saber por que o vetor resp[0] esta recebendo o ultimo valor atribuído no vetor letra[0] se eu não estou atribuindo nenhum valor neste vetor?

#include <iostream>
using namespace std;

int main (){
    
    char palavra[5], resp[5], letra[0];
    int v;
    
    cout << "Digite a palavra secreta: ";
    cin >> palavra;  
    cout << endl << "Digite uma letra: ";
    cin >> letra[0];
    cout << resp << endl;
    cout << letra[0];


    return 0;
}

 

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

@Elias_sarges     seu código contém um erro lá na variável letra está com zero posição e o c++ proíbe isso então coloque assim :

char letra[1];

mas testei aqui e o vetor resp não está recebendo o valor de letra [ 0 ] ele está apenas zerado pois não recebeu nenhum valor e por isso não imprimiu nada ,  o que ele imprime é o valor de letra [ 0 ] .

Link para o comentário
Compartilhar em outros sites

Coloquei letra[0] porque queria só um caractere, e se colocar letra[1] fica espaços contando com a posição 0, mas mesmo colocando o vetor com posição 1, ele da o mesmo erro, mesmo não atribuindo valor no vetor resp ele mostra o mesmo valor contido no vetor letra. isso que aparece quando executo o programa.

 

Capturar.thumb.PNG.aef04ad1a610ae6a6cf984a210a7c7e0.PNG

 

 

Capturar.PNG

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

Se você quer apenas uma letra, por que precisa usar o tamanho do vetor? Use apenas char letra;

Quando você não inicializa uma variável, é possível que na hora da leitura, ela acabe mostrando o valor de outra variável, isso é chamado de buffer overflow... Tente evitar isso dando um valor inicial as variáveis.

 

Lembrando que quando você coloca: char letra[1];

você só pode acessar: letra[0];  pois 1 é a quantidade de elementos e 0 é o inicial...

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

@Elias_sarges    na hora que você declara uma variável com determinado tamanho você coloca dentro de colchetes a quantidade de espaços então se você que um espaço você coloca variavel [ 1 ] e lá embaixo na hora de usar essa variável você usa a posição da variavel que começa em zero . então seu código ficaria assim :

#include <iostream>
using namespace std;

int main (){

    char palavra[5], resp[5], letra[1];
    int v;

    cout << "Digite a palavra secreta: ";
    cin >> palavra;
    cout << endl << "Digite uma letra: ";
    cin >> letra[0];
    cout <<"valor de resp -----> "<<resp << endl;
    cout <<"valor de letra[0] -> "<<letra[0];


    return 0;
}

veja nesse print que a variável resp não mostra nenhum valor, enquanto a variável letra mostra o que foi digitado.

letra2.jpg.f6dbf0adcce570164b0856257c6f1763.jpg

Link para o comentário
Compartilhar em outros sites

Existe uma leve diferença na declaração de um vetor e na atribuição dele, quando você vai declarar ->

char letra[1]; // isso significa que o vetor, neste caso, só suporta um caractere.
char letra[2]; // neste caso, ele suporta 2 caracteres.

 

quando você for atribuir um valor a ele com o operador = , o primeiro valor começará sempre da posição 0 -> 

letra[0] = 'a'; // se você fizer letra[1], você estará escrevendo em uma
                // região de memória que não pertence ao vetor letra.

 

o vetor resp mostrava o mesmo valor porque você estava indiretamente escrevendo em resp[0], pois neste
caso aí, o endereço de memória inicial do vetor resp estava situado logo após o fim do vetor letra.

 

neste caso, você até pode acessar os campos de resp através do vetor letra, assim ->

 

 

letra[2] = 'b'; // escrevendo em 2 bytes acima do domínio da variável 
cout << resp[1] << endl; // isso vai mostra o 'b' , pois os campos do vetor 
                         // resp estão logo acima do vetor letra

 

Cheers

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!