Scanf´s

Scanf´s

by Rafael Kenji Murayama -
Number of replies: 6
Coisas estranhas estao acontecendo com o meu ep...
...os scanf´s das funções não funcionam direito....
...soh funcionam com "%s", mesmo sendo com uma variavel char comum...
...e mesmo em strings os scanf´s não funcionam direito... depois de algumas iterações o valor de uma string se perde e nada funciona direito...

...espero que alguém possa me ajudar!!!
In reply to Rafael Kenji Murayama

Re: Scanf´s

by Marco Dimas Gubitoso -
Se vc usar scanf com "%s" e colocar uma variável char comum, não me surpreende de coisas estranhas passem a acontecer. O scanf vai escrever o que lê na posição de memória que vc passar.

Mesmo que vc tenha usado um endereço (com &) para uma variável char, você terá problemas: quando ler uma string, seus caracteres serão colocados na memória em posições consecutivas a partir do endereço que vc passou, alterando as variáveis seguintes! Se vc escrever em uma dessas variáveis, o valor da string também muda.

Verifique se vc alocou memória para suas strings. A alocação pode ser estática, na declaração:

char s[1000];

ou dinâmica, usando malloc.


Compile e rode o programa em anexo para ver o galho que dá.
In reply to Marco Dimas Gubitoso

Re: Scanf´s

by Rafael Kenji Murayama -
ok...entendi...

...mas o problema eh que os scanf´s simplesmente não funcionam com o %c...
Quando eu coloco um scanf("%c", &a) por exemplo, quando eu compilo e rodo, a execução do programa não para ao chegar no tal scanf, e o mais absurdo é que funciona com o %s...
...o que eu posso estar fazendo de errado???
...estranho é que isso aconteceu no primeiro scanf da primeira função que eu escrevi quando comecei a editar o monolitico.c

Obrigado pela ajuda...e peço socorro de novo!!!
In reply to Rafael Kenji Murayama

Re: Scanf´s

by Vanessa Sabino -
O scanf com %c procura um caracter. Quebras de linhas (como o enter que uma pessoa digita) são caracteres.
Já o %s vai pular esses caracteres e procurar algo que se enquadra em "string".
Então, se tiver algum enter sobrando que você não limpar, o %c vai pegar esse enter e continuar o programa.
In reply to Vanessa Sabino

Re: Scanf´s

by Rafael Kenji Murayama -
Certo...acho que entendi...
...mas como isso poderia aparecer no meu programa??
...poderia ser um "\n" em algum printf ou alguma coisa do tipo???
...pq não consigo detectar nada de "errado" no meu EP...

Obrigado²....ajuda²
In reply to Rafael Kenji Murayama

Re: Scanf´s

by Vanessa Sabino -
Não, quem digita o enter é o próprio usuário.
Por exemplo, aparece lá o menu e ele quer mostrar a lista. Digita
m<enter>
Seu programa só lê o m, sobra o <enter> lá no stdin. Aí quando passa um scanf de %c novo ele lê só esse enter. No próximo, ele já vai ler o que eventualmente for digitado após o enter.
In reply to Vanessa Sabino

Re: Scanf´s

by Rafael Kenji Murayama -
...ah tah!!!.....agora finalmente entendi o problema!!!
...então sempre que eu usar um scanf com %c depois de qualquer outro scanf (%c ou %s) ele vai pegar o enter anterior?!....
...mas então, é errado usar o %s num variavel char "simples"???
...ou se for errado usar o %s, como faço pra limpar o tal do stdin???


Muuuito obrigado pela paciência!!!