следующий предложенный код:
- выполняет желаемую функциональность
- чисто компилирует
- реализует конечный автомат с 2 состояниями
- on LINUX, распознает
<ctrl-d>
как конец ввода, который должен быть первым символом в новой строке - включает в себя оператор
switch
для обеспечения четкого распознавания каждой «активности» - использует соответствующие горизонтальный и вертикальный интервал для удобства чтения и понимания
- не исправляет написание
characters
и теперь предлагаемый код:
#include <stdio.h>
int main( void )
{
int input;
int words = 0;
int charecters = 0;
int spaces = 0;
int newline = 0;
int tab = 0;
int total = 0;
printf( "Please start your input and press ^D to terminate:\n" );
enum { inWord, notInWord } state = notInWord;
while ( (input=getchar())!= EOF )
{
++total;
if( input == ' ' || input == '\n' || input == '\t' )
{
state = notInWord;
}
switch( input )
{
case ' ':
++spaces;
break;
case '\n':
++newline;
break;
case '\t':
++tab;
break;
default:
charecters++;
if (state == notInWord )
{
state = inWord;
++words;
}
}
}
printf( "The total number of keyboard strokes was %d.\n", total );
printf( "The total number of charecters is %d\n", charecters );
printf( "The number of new lines is: %d\n", newline );
printf( "The number of space is: %d\n", spaces );
printf( "The number of tabs is: %d\n", tab );
printf( "The number of new words is: %d\n", words );
return 0;
}
типичный запуск программы:
Please start your input and press ^D to terminate:
lkfjaiennf;aliea vliesge lsker'
flkaiwore
The total number of keyboard strokes was 42.
The total number of charecters is 38
The number of new lines is: 2
The number of space is: 2
The number of tabs is: 0
The number of new words is: 4
Обратите внимание, что программа не распознает пунктуацию как разделитель слов. Предложите включить заголовочный файл: ctype.h
, чтобы сделать код более надежным, используя функции:
ispunc()
isdigit()
isspace()