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

Я пытался сделать следующее: я считаю буквы, пока пользователь не нажмет пробел. Когда это происходит, я проверяю, больше ли счетчик, чем три. Если это так, он увеличивает counterLargerThanThree на единицу. Это работает непрерывно, пока пользователь не введет точку. Когда пользователь вводит точку, программа завершает работу.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int c;
    int cont = 0, aux , counterLargerThanThree = 0;
    printf("Enter a phrase that ends with a period:\n");

    c = getchar();

    while(c != '.')
    {
        aux = c;
        c = getchar();
        cont++;

        if(aux == ' ')
        {
            if(cont>3)
            {
                counterLargerThanThree++;
            }

            cont = 0;
        }
    }

    printf("%i \n",counterLargerThanThree);


    system("pause");
    return 0;
}
2
Tomas Varas 7 Сен 2019 в 22:22

2 ответа

Лучший ответ

В конце ввода (т. Е. При обнаружении точки) цикл while пропускается, и у вас никогда не будет возможности посчитать это последнее слово, если оно окажется длиннее трех символов.

Попробуйте вместо этого:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char c;
    int cont = 0, counterLargerThanThree = 0;
    printf("Enter a phrase that ends with a period:\n");

    do
    {
        c = getchar();
        if (c != ' ' && c != '.')
        {
            ++cont;
        }
        else
        {
            if (cont > 3)
            {
                counterLargerThanThree++;
            }
            cont = 0;
        }
    }
    while (c != '.');

    printf("%i \n", counterLargerThanThree);


    system("pause");
    return 0;
}
1
user4520 7 Сен 2019 в 19:44

Вы не считаете последнее слово, так как при появлении символа точки . цикл прерывается, даже если длина слова> 3. Попробуйте что-нибудь подобное.

#include<stdio.h>
#include <stdlib.h>

int main()
{
    int c;
    int cont = 0, aux , counterLargerThanThree = 0;
    printf("Enter a phrase that ends with a period:\n");


    while(1)
    {
        c = getchar();
        cont++;

        if(c == ' ' || c=='.')
        {
            if(cont>3)
            {
                counterLargerThanThree++;
            }

            cont = 0;
        }
        if(c=='.'){
            break;
        }
    }


    printf("%i \n",counterLargerThanThree);


    system("pause");
    return 0;
}
0
shubham jha 7 Сен 2019 в 19:47