Вы увеличиваете c
в два раза для пробела.
Ваше if
утверждение должно быть просто:
if(ch==32)
++w;
У вас есть еще один тонкий баг, такой как строка h e l l o spc spc t h e r e (с два пробела) будут записаны как три слова в вашем коде.
Вот как I написал бы это, чтобы избежать этих проблем. Обратите внимание на использование lastch
, чтобы избежать подсчета последовательностей пробелов в качестве нескольких слов.
int main(void) {
int ch = ' ', lastch, w = 0, c = 0;
do {
lastch = ch;
ch = getchar();
++c;
if (ch == ' ') {
if (lastch != ' ') {
++w;
}
}
} while (ch != '\n');
if (lastch != ' ') {
++w;
}
printf("num of characters is %d\n",c);
printf("num of words is %d\n",w);
return 0;
}