Невозможно получить ввод, когда l oop завершается - PullRequest
2 голосов
/ 02 мая 2020

Привет Всем, хам пытается подсчитать количество слов и символов и т. Д. c .. для проекта, однако, в строке, где я вводю ^ D для завершения ввода, эта строка не учитывается в словах и т. Д. c ..

Любая строка, где ввод заканчивается, не считается. Кроме того, по какой-то причине он не печатает операторы внизу, когда я запускаю программу, но это происходит, когда я отлаживаю ее.

Буду признателен за вашу помощь в том же.

#include <stdio.h>

int main()
{
    int input;
    int words =0;
    int charecters =0;
    int spaces =0;
    int newline =0;
    int tab= 0;
    int total =0;
    int dummy;
    int lastChar;
    printf("Please start your input and press ^D to terminate:\n");
    while ((input=getchar())!= EOF)
    {
        if(input == ' ')
        {
            ++spaces;
        }
        else if(input =='\n')
        {
            ++newline;
            fflush(stdin);
        }
        else if(input == '\t' )
        {
            ++tab;
        }
        else
        {
            charecters++;
            dummy = input;
        }


        lastChar = input;
        if(dummy != lastChar)
        {
            words++;
        }

        total++;
    }
    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;

}

1 Ответ

0 голосов
/ 03 мая 2020

следующий предложенный код:

  1. выполняет желаемую функциональность
  2. чисто компилирует
  3. реализует конечный автомат с 2 состояниями
  4. on LINUX, распознает <ctrl-d> как конец ввода, который должен быть первым символом в новой строке
  5. включает в себя оператор switch для обеспечения четкого распознавания каждой «активности»
  6. использует соответствующие горизонтальный и вертикальный интервал для удобства чтения и понимания
  7. не исправляет написание 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...