Пардон если слишком толсто, зато работает, тестил, вроде ошибок нет.
Код:
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 255
/*
Подсчет слов. Словом считается минимум одна буква,
которая окружена с обеих сторон как минимум одним
пробелом
*/
int Words_Count(char *buff)
{
int word = 0;
int k = 0;
// вычисляем длинну строки
int len = strlen(buff);
// последний символ не пробел?
if (!isspace(buff[len]))
// нет, вносим пробел
buff[len] = ' ';
// ввод начался с пробелов?
if (isspace(buff[0]))
{
// считаем количество пробелов
while (isspace(buff[k]))
k++;
}
// счет от первого места, где закончились пробелы
for (int i = k; i < SIZE; i++)
{
// встретили пробел?
if (isspace(buff[i]))
// надо же, еще один!
if (isspace(buff[i+1]))
// ищем не пробелы
continue;
// нашли не пробел, значит слово
else word++;
}
return word;
}
int main ()
{
// Выделяем память и заполняем нулями
char *buff = (char*)calloc(SIZE, sizeof(char));
// считываем строку
gets_s(buff,SIZE);
printf("So, we have the %d words", Words_Count(buff));
getchar();
return 0;
}