Dopo l'acquisizione della stringa svuota il buffer di input con
while(getchar() != '\n');
perche è rimasto ancora il carattere new line ('\n')
Poi usa %c per il carattere ch e non %s.
In conslusione con le modifiche
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int conta (char stringa [], int N, char c);
int main ()
{
char st[100];
char ch;
int lunghezza;
printf("inserisci stringa\n");
scanf("%s", st);
while(getchar() != '\n');
lunghezza = strlen(st);
printf("Lunghezza stringa %d", lunghezza);
printf("\n");
printf ("inserisci carattere da ricercare\n");
// se passo a scanf il formato carattere l'algoritmo va in loop
scanf("%c", &ch);
printf("%d", conta(st, lunghezza, ch));
while(getchar() != '\n');
getchar();
return 0;
}
int conta (char stringa [], int N, char c )
{
int i;
i=0;
int j=0;
for (i = 0; i<N; i++)
{
if (stringa[i] == c)
j++;
}
return j;
}