Ler uma string de no máximo 50 caracteres e em seguida um caractere (entre A e z - consista se o caracter esta nesse
intervalo), mostrar quais as posições esse caractere (maiúscula ou minúscula) na string lida e quantas vezes ele apareceu
Vc criou umas variáveis desnecessárias e está verificando se o primeiro caracter da frase é uma letra, vc deveria fazer esta verificação na variavel carac.
Daria pra fazer assim:
#include <ctype.h>
#include <stdio.h>
#include <string.h>
int main() {
char letra;
char frase[50] = {0};
puts("Digite uma frase");
// Lê uma frase de no máximo 50 caracteres
fgets(frase, 50, stdin);
// Guarda o comprimento da frase
int length = strlen(frase);
// Remove o caracter de nova linha da frase
frase[length - 1] = '\0';
// Converte a frase para letras minúsculas
for (int i = 0; i < length; i++) {
frase[i] = tolower(frase[i]);
}
puts("Digite um caracter de Aa a Zz:");
// Lê um caracter
scanf("%c", &letra);
// Converte para minúsculo
letra = tolower(letra);
if (letra >= 'a' && letra <= 'z') {
int contador = 0;
for (int i = 0; i < length; i++) {
if (frase[i] == letra) {
printf("Posição: %d\n", i);
contador++;
}
}
printf("Total: %d\n", contador);
} else {
puts("Letra deve ser de a-z ou A-Z");
}
return 0;
}