Ir ao conteúdo

C Por que não esta gerando o resultado esperado


Ir à solução Resolvido por isrnick,

Posts recomendados

Postado

 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

 

Postado
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
  • Solução
Postado

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
Postado

Para endereco não serve muito porque comumente endereços são de nomes compostos; melhor buscar o uso de outra formatação alternativa de " %s".

  • Obrigado 1
Postado

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

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