Dificuldade no ciclo for

A intenção é fazer um ciclo que leia 100 letras(pra testar coloquei só 10) e dizer qual a quantidade de vogais digitadas. Mas no meu ciclo for, dps de digitar a primeira letra ele começa a executar a instrução “printf” duas vezes seguidas, reduzindo a quantidade de vezes que posso digitar letras a 5. abaixo segue o código.

//sintese:
//objetivo:
//entrada
//saida
#include <stdio.h>
#include <conio.h>
int main(void){
	int contador=0;
	char vogal;
	for(int i=1;i<=10;i++){
		printf("Digite uma letra %i \n",i);
		scanf("%c",&vogal);
		if(((((vogal=='a')||(vogal=='e'))||(vogal=='i'))||(vogal=='o')||(vogal=='u')))
			contador+=1;
	}
	
	printf("%i vogais foram digitadas",contador);
	
	return 0;
}

Vamos la

o scanf quando precisa ler dados da stdin, especialmente um caracter, pode ter alguns comportamentos inesperados. eu, por exemplo, evito o uso do scanf ( de fato eu evito ler da STDIN a menos que seja imperativo E OLHE LA ) mas no seu caso existe uma pequena substituicao que pode ajudar, e muito:

dentro do loop faça isso

		printf("Digite uma letra %i: ",i);
		scanf("%s",buffer);
		vogal = buffer[0];

o buffer é um char buffer[128]; declarado fora do loop, abaixo da vogal.

dessa forma vc vai ler uma string ( uma cadeia de caracteres ) e vai pegar o primeiro (posição zero) como sendo a vogal ( e ignorando o resto ).

na se preocupe, eu acho a mistura de printf com scanf algo ate ruim de ser ensinado em faculdades porem vc sentando e programando vai entender isso em algumas semanas. sem pratica… fica dificil

1 curtida

Obrigado Consegui Resolver Aqui, Vlw Amigo!