Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
Elias_sarges

C++ Problema em um codigo C++

Recommended Posts

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;
}

 

Editado por Simon Viegas
Favor ler tópico e seguir orientações sobre postagem de códigos: http://www.clubedohardware.com.br/announcement/27-poste-seus-c%C3%B3digos-corretamente/
  • Curtir 1

Compartilhar este post


Link para o post
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 ] .

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 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

    Compartilhar este post


    Link para o post
    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

    Compartilhar este post


    Link para o post
    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

    Compartilhar este post


    Link para o post
    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

    Editado por Derleyvolt

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário

    Entre para seguir isso  





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×