Что не так с моей программой подсчета символов, слов, строк? - PullRequest
0 голосов
/ 30 января 2019

Попытка написать программу на C, которая:

считает количество символов, слов и строк, прочитанных из стандартного ввода, до достижения EOF.Предположим, что ввод представляет собой текст ASCII любой длины.Слова определяются как непрерывные последовательности букв (от a до z, от A до Z) и апостроф (', значение 39 десятичное), разделенные любым символом вне этих диапазонов.Строки определяются как непрерывные последовательности символов, разделенные символами новой строки ('\ n').Символы после последнего символа новой строки не будут включены в счетчик строк.

Я написал следующее, которое отлично работает для подсчета символов, но не учитывает ни слова, ни строки.Я не понимаю, почему.

#include <stdio.h>

int main() {

    unsigned long int countchar=0;
    unsigned long int word=0;
    unsigned long int line=0;

    int c;

    while (((c=getchar())!=EOF)) {

        countchar++;

        if ((c>='A' && c<= 'Z') || (c>='a' && c<= 'z') || (c==39)) {    
            word++;
        }

        else if (c=='\n') {
            line++;
        }
    }

    printf("%lu %lu %lu\n", countchar, word, line);

    return 0;    
}

Ответы [ 3 ]

0 голосов
/ 30 января 2019
while ((c=getchar()!=EOF)) {

должно быть

while (((c=getchar())!=EOF)) {

, поскольку в противном случае оно интерпретируется как

while ((c=(getchar())!=EOF))) {
0 голосов
/ 30 января 2019

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

if (!((c>='A' && c<= 'Z') || (c>='a' && c<= 'z') || (c==39)) {
    word++;
}
if (c=='\n') {
    line++;
} 
0 голосов
/ 30 января 2019

char - зарезервированное слово.Вы не можете назвать переменную, которая.

...