Страницы

Translate

воскресенье, 7 июля 2013 г.

Упражнение 1.11. Как протестировать программу подсчета слов?

Упражнение 1.11. Как протестировать программу подсчета слов? Какой
ввод вероятнее всего обнаружит ошибки, если они были допущены?

#include <stdio.h>
#define IN 1 //внутри слова
#define OUT 0 //вне слова

int main()
{
int c, nline, nword, nchar, state;
state=OUT;
nline=nword=nchar=0;
while((c=getchar()) != EOF)
{
++nchar;
if(c=='\n')
nline++;
if(c==' ' || c=='\n' || c=='\t')
state = OUT;
else if(state==OUT)
{
state = IN;
nword++;
}
}
printf("новых символов = %d\n\
новых предложений = %d\n\
новых слов = %d\n", nchar, nline, nword);
return 0;
}

Результат:


Тест: цифры воспринимаются как буквы, слова, предложения.









3 комментария:

  1. Скорее всего имелось ввиду не это. Надо было найти такую управляющую последоватеьность, при которой счетчик новых слов даст неверное значение (увеличится при отстутствии "слова" или проигнорирует его)

    ОтветитьУдалить
  2. state=OUT;
    else if(state==OUT){
    state=IN;
    ++nw;

    вот здесь поэксперементируй с "="

    ОтветитьУдалить
  3. Проше прощения за любопытство, не могу понять по какой логике работает else if. Почему вообще state меняется на IN конкретно при пробелах, табах и переносах?

    ОтветитьУдалить