Função bugada

O problema é o seguinte, peço pra o usuário digitar 2 bandas compostas de: nome, estilo, integrantes e posição no ranking. Porém o nome da segunda banda a ser informada impossibilita o usuário, o que será?

typedef struct  {
	char nomeBanda[50];
	char estilo[50];
	int integrantes;
	int pos;
	
} tBanda;
tBanda ban [100];


void preenche (	){
 int i;
 for(i=0; i<2; i++){


printf("nome da banda: \n");
gets(ban[i].nomeBanda);
printf("estilo da banda: \n");
gets(ban[i].estilo);
printf("numero de integrantes: \n");
scanf("%d", &ban[i].integrantes);
printf("posicao ranking da banda: \n");
scanf("%d", &ban[i].pos);


}
printf("\n------------------------------------------------\n");
for(i=0; i<2; i++){
	printf("Banda: %s\n", ban[i].nomeBanda);
	printf("Estilo: %s\n", ban[i].estilo);
	printf("Integrantes: %d\n", ban[i].integrantes);
	printf("Posiçao: %d\n", ban[i].pos);

Olá Larissa, coloque a função getchar() no final do seu primeiro laço for. Isto resolverá seu problema.

   for(...)
   {
     ...
     scanf("%d", &ban[i].pos);
     getchar();
   }
   ...

O seu último scanf deixa uma nova linha no buffer, sendo assim na próxima iteração do seu laço for, esta nova linha vai fazer que o seu primeiro gets(ban[i].nomeBanda) seja pulado executando assim a próxima linha que é justamente gets(ban[i].estilo) e desta forma causa esta confusão que você descreveu.

Tente não utilizar função gets(...) ela não é segura e já está obsoleta. A partir do C11 foi convencionado o uso de gets_s(...).

Qualquer dúvida poste que tentaremos ajudar.

3 curtidas

obrigada