Scanf´s

Scanf´s

por Rafael Kenji Murayama -
Número de respostas: 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!!!
Em resposta à Rafael Kenji Murayama

Re: Scanf´s

por 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á.
Em resposta à Marco Dimas Gubitoso

Re: Scanf´s

por 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!!!
Em resposta à Rafael Kenji Murayama

Re: Scanf´s

por 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.
Em resposta à Vanessa Sabino

Re: Scanf´s

por 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²
Em resposta à Rafael Kenji Murayama

Re: Scanf´s

por 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.
Em resposta à Vanessa Sabino

Re: Scanf´s

por 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!!!