Ir para conteúdo
Fórum Script Brasil
  • 0

Algeum pode me dizer o que tem de errado aqui?


Lcain

Pergunta

#include <stdio.h>


void main(){
    
    char nome[] = "nulo" ;
    char cidade[] = "nulo";
    int tell, CPF;
    
    printf("Digite seu nome\n");
    scanf("%s\n", & nome);
    printf("Digite sua cidade\n");
    scanf("%s\n", & cidade);
    printf("Digite seu telefone\n");
    scanf("%d\n", & tell);
    printf("Digite seu CPF\n");
    scanf("%d\n", & CPF);
    
    printf("Seu nome é %s, e você vive na cidade de %s. Seu telefone é %d e seu CPF é %d.", nome, cidade,tell,CPF);
    
}
 

// Quando rodo o programa, simplismente ele pede meu nome, e ao invés de seguir perguntando a cidade, ele para. Pra continuar preciso digitar

outra informação, e ai ele pede a cidade, e depois ignora o pedido do tell e CPF.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

quando você faz char nome[] = "nulo" ; é como se nome recebesse char nome[5], ou seja, 4 letras que contem "nulo" mais o caractere nulo('\0') que marca o fim da string, ou seja você tem um espaço de 5 caracteres podendo usar só 4 já que como falei 1 é o nulo. Em C/C++ você sempre deve indicar um tamanho suficiente para conter sua string. Embora isso que você usou funcione, você nunca vai saber o tamanho da string que a pessoa vai usar, sendo assim melhor é reservar um X numero de caracteres para que sobrem e não faltem. É melhor char nome[100] = "nulo"; que char nome[] = "nulo";.

 

na hora de ler strings não ponha & no scanf. Isso causa a quebra do seu programa. Então tome por regra: NÃO PONHA & NO SCANF PARA LER STRINGS NEM PONTEIROS, PARA O RESTO SIM..(int, float, double, etc). Duvido que você precise ler direções de memória de ponteiros com scanf assim que SOMENTE PARA STRINGS NÃO SE DEVE POR & ADIANTE.

Quando se costuma ler uma sucessão de strings C  e C++ costumam dar "certos erros" de leitura, realmente não são erros. você PRECISA BUSCAR ALGUMA FORMA DE ABORDAR ESSE PROBLEMA. Busque no google como limpar o lixo do buffer de entrada em C ou C++. Existem varias formas de se abordar o problema. Se quiser posso lhe explicar como mas não tenho pensamento de montar um tutorial, você deveria entrar em discord. te vou mandar um msg privado com a direção do meu server de discord.

Link para o comentário
Compartilhar em outros sites

  • 0

Uma boa resposta do vandodp. Mas para ler string com espaço pode se usar o gets (menos seguro) fgets (que lê também \n com enter e tudo para a variável) ou scanf ("%[^n]". Nesse caso não tem problema. Como o vandodp também disse, o número do array deve ser inclusivo com a necessidade do programa, pode criar também uma função para definir o tamanho...

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

Lê todo o texto até o enter e salva na string.

Editado por Aristóteles
Pequeno erro
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...