scanf está sendo pulado?

scanf está sendo pulado?

por Tiago Kuribara Lasso -
Número de respostas: 6

eis um trecho do meu código:

insere=mallocSafe(sizeof(Filme));
printf("Digite o nome do filme:\n");
scanf("%[^\n]s",insere->nome);
printf("Digite o ano:\n");
scanf("%d",insere->ano);
printf("Digite a nota:\n");
scanf("%f",insere->nota);
printf("Digite o numero de votos:\n");
scanf("%d",insere->votos);
printf("Digite a distribuicao:\n");
scanf("%[^\n]s",insere->dist);
insereini(lista,insere);

 

quando eu rodo o programa, ele imprime os dois primeiros printfs, "pulando" o primeiro scanf

em seguida, ele imprime os 3 printfs finais, pulando 2 scanfs SEGUIDOS D:

 

porque? como? onde? o que faço pra me livrar disso? T_T

obrigado

Em resposta à Tiago Kuribara Lasso

Re: scanf está sendo pulado?

por Tiago Kuribara Lasso -

acabei de ver que a função que eu estava tentando fazer já foi fornecida no esqueleto ¬¬"

mas então me deparei com outro problema. a função carregaLista está fazendo o programa parar de funcionar.

teóricamente ela tinha que funcionar "de fábrica", não? xD

ty (:

Em resposta à Tiago Kuribara Lasso

Re: scanf está sendo pulado?

por Luiz Armesto -

A função carregaLista já vem pronta, mas ela chama a função insereFilme. A insereFilme também já vem pronta, mas ela chama a função achaFilme. A função achaFilme deve ser feita por nós, então se tiver erro na achaFilme a insereFilme não funciona direito e consequentemente a carregaLista também não.

Nem sempre o problema está onde parece a primeira vista, as vezes tem que procurar pela pilha de execução para achar onde está o bug.

Em resposta à Tiago Kuribara Lasso

Re: scanf está sendo pulado?

por Lucas Hiroshi Hayashida -

Eu queria poder explicar pra voce, mas nem eu sei direito o que significa isso, mas tente colocar um getchar(); antes de ler as strings e mais uma coisa, no EP tem uma funcao dada que se chama leString, use ela para substituir o gets/fgets/scanf("%s", string)/scanf("%[^\n]", string)

Em resposta à Tiago Kuribara Lasso

Re: scanf está sendo pulado?

por Guilherme Rojas -

Bizarramente, se você coloca um espaço antes do %s no scanf:
scanf("_&s", &texto); 
*entenda '_'como ' ' (espaço)

 

ele resolve parte dos problemas..

Também não sei te dizer bem oq acontece, mas possivelmente os scanfs seguidos acabam lendo ou um enter que vc digitou, ou alguma coisa estranha assim! 

Em resposta à Guilherme Rojas

Re: scanf está sendo pulado?

por Rafael Campos Cruz -

Então, uma explicação meio simplista do porque é mais ou menos assim:

o compilador tem um lugar específico que ele usa como buffer de entrada, é tipo uma área reservada da memória que ele grava as coisas que tão sendo lidas pra ser imediatamente usadas.

Ele basicamente pega o que você insere, guarda na memória e tira um pedaço do "tamanho" que você ta pedindo (8 bytes para int e por aí vai...).

Se você lê algo maior do que vai usar ele já grava mais coisa no buffer de entrada, se não tem algo que limpe esse buffer ou interrompa o andamento do programa ele pega a próxima posição do buffer e segue reto, capturando lixo no meio do caminho.

É BEM simplista essa explicação, mas é por aí XD