Ir ao conteúdo
  • Cadastre-se

C Por que não esta gerando o resultado esperado


Ir à solução Resolvido por isrnick,

Posts recomendados

 Estou começando a aprender a programar, com isso estou me deparando com um talvez erro ou inexperiência(acho mais propalável), estou escrevendo um código simples mas por alguma razão não esta saindo o resultado como esperado, estou usando a IDE  CODE BLOCKS, ja usei o Dev-C++ mas tive muitos problemas com erros, enfim segue o código abaixo e depois de compilado o que acontece. Depois de Compilado, ele não mostra no final o endereço como colocado. Se alguém puder me ajudar, por favor. 

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



int main(int argc, char** argv)


{
    char nome [30];
    char endereco [50];
    char idade;



    printf("nome\n");
    scanf("%s", &nome);



    printf("endereco\n");
    scanf("%s", &endereco);



    printf("idade\n");
    scanf("%d", &idade);



    printf("\n nome: %s", nome);
    printf("\n endereco: %s", endereco);
    printf("\n idade: %d", idade );



    return 0;
}

 

image.thumb.png.fb8c8becb0bdd0eb047434fa1e299ac8.png

 

Link para o comentário
Compartilhar em outros sites

29 minutos atrás, emanoel souza costa disse:

 Estou começando a aprender a programar, com isso estou me deparando com um talvez erro ou inexperiência(acho mais propalável), estou escrevendo um código simples mas por alguma razão não esta saindo o resultado como esperado, estou usando a IDE  CODE BLOCKS, ja usei o Dev-C++ mas tive muitos problemas com erros, enfim segue o código abaixo e depois de compilado o que acontece. Depois de Compilado, ele não mostra no final o endereço como colocado. Se alguém puder me ajudar, por favor. 


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



int main(int argc, char** argv)


{
    char nome [30];
    char endereco [50];
    char idade;



    printf("nome\n");
    scanf("%s", &nome);



    printf("endereco\n");
    scanf("%s", &endereco);



    printf("idade\n");
    scanf("%d", &idade);



    printf("\n nome: %s", nome);
    printf("\n endereco: %s", endereco);
    printf("\n idade: %d", idade );



    return 0;
}

 

image.thumb.png.fb8c8becb0bdd0eb047434fa1e299ac8.png

 

Para ler strings inclua a biblioteca #include <string.h>

E nunca use & 

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

  • Solução

Coloque um espaço antes do % nos scanfs com %s, para descartar caractere o '\n' (nova linha) e qualquer outro caractere de espaço vazio (espaço, tabulação, etc) que tiver sobrado dos scanfs anteriores na entrada padrão (stdin).

 

E para vetores (como nesses 2 vetores de char do seu programa) não vai & antes do nome do vetor, pois usando o nome diretamente já obtém um endereço de memória.

 

Ex:

    scanf(" %s", endereco);

 

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

Sim, como o @Mauro Britivaldo  apontou usar %s limita a ler apenas 1 palavra digitada, então se você digitar uma frase (como por exemplo um endereço completo, ou um nome com sobrenomes) não vai servir pois só vai obter a primeira palavra digitada.

 

No caso poderia usar o outro tipo de especificador de string %[ , e usar assim %[^\n] (= ler e guardar qualquer caractere que não seja o caractere nova linha '\n'), assim vai ler tudo até encontrar um caractere nova linha '\n', ou seja pega tudo que tiver até o fim da linha e guarda no vetor de char.

 

    scanf(" %[^\n]", endereco);

 

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

@isrnick @Mauro Britivaldo @herbertbahia

 

Muito obrigado, me ajudaram muito, e já esclareceram também essa minha outra dúvida em relação a digitar as frases, ou nomes com sobrenomes , já que eu também estava meio confuso com isso, mas novamente muito obrigadooo. 

  • Curtir 2
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...