Lcain Postado Agosto 10, 2021 Denunciar Share Postado Agosto 10, 2021 #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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vangodp Postado Agosto 10, 2021 Denunciar Share Postado Agosto 10, 2021 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Aristóteles Postado Novembro 12, 2021 Denunciar Share Postado Novembro 12, 2021 (editado) 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 Novembro 12, 2021 por Aristóteles Pequeno erro Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Lcain
#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
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.