This is because in the first two calls from scanf()
you ask to read exclusively characters that are not line breaks. This implies the scanf()
leave the line break character in the buffer of stdin
until a call consumes the breaking character, that is, until the third call (scanf("%d")
).
What you can do to solve is "spy" the next character that is on buffer right after each of the first two calls from scanf()
and consume it if it is a line break. Example:
int main()
{
Person pessoa = { "", "", -1 };
char c;
printf("Digite seu nome:\n");
scanf("%99[^\n]", pessoa.name);
/* Retira o primeiro (ou próximo) caractere que está no buffer
* do stdin e devolve (para o mesmo buffer) caso não seja uma
* quebra de linha. */
c = getc(stdin);
if (c != '\n')
ungetc(c, stdin);
printf("Digite seu endereço:\n");
scanf("%99[^\n]", pessoa.address);
/* "Espia" novamente o buffer do stdin para consumir a quebra
* de linha. Essa segunda chamada não é obrigatória porque o
* próximo scanf() será com a format string %d, mas deixei aqui
* para manter o padrão de sempre consumir um newline após as
* chamadas scanf("%[^\n]"). */
c = getc(stdin);
if (c != '\n')
ungetc(c, stdin);
printf("Digite sua idade:\n");
scanf("%d", &pessoa.age);
printf("Nome: %s\nEndereço: %s\nIdade: %d\n", pessoa.name, pessoa.address, pessoa.age);
return 0;
}
José, you have already tried to scan %s?
– Daniel Mendes
Yes, but it was causing the same error, even with only one scanf in the code
– José Isaac
From what I could understand, in the link you provided, when I give a enter the delivery buffer does not consume the correct n?
– José Isaac