Дана строка. Определить, сколько слов заканчивается введенной пользователем буквой

Не выводит число, помогите, в чем ошибка? После проверок ничего не происходит, просто программа заканчивается(







#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

int main()
{
char s[30];
int i,kolvo=0,n;
printf("Введите строку\n ");
gets(s);
printf("Вот она %s\n",s);
printf("Введите букву\n ");
scanf("%c",n);

for (i=0; i < strlen(s); i++)
{if ((s[i] == (' ') || (s[i] == ('.')))&&(s[i - 1]==(n))) kolvo++;}

printf("%d\n",kolvo);



return 0;
}




Ответы (1 шт):

Автор решения: AlexGlebe

Прокомпилировал, и несколько ошибок у вас нашёл. Вы в scanf аргумент с мусором стека заводите, а функция думает, что это адрес и прога падает. Нужно передавать адрес переменной с типом char. Дальше gets устаревшая функция, поменял на fgets. Пока пашет. Читайте инструкции к функциям внимательно. Цикл поиска пробелов нужно начинать со второй буквы, а то может опять всё упасть если первая буква будет пробелом.

// gcc -Wall -std=c11 strilett.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

int main(){
char s[30];
int i,kolvo=0/*,n*/;
char  let ;
printf(u8"Введите строку\n ");
fgets(s,sizeof(s),stdin);
printf(u8"Вот она %s\n",s);
printf(u8"Введите букву\n ");
scanf("%c",& let);

for (i=1; i < strlen(s); i++){
  if ((s[i] == (' ') || (s[i] == ('.')))&&
      (s[i - 1]==(let)))
    kolvo++;}

printf("%d\n",kolvo);

return 0;}
→ Ссылка