Как подсчитать строки в C [в режиме ожидания]

Итак, я сейчас пишу программу для подсчета строк в блоке текста. Независимо от того, он всегда возвращает ноль. Вот фрагмент кода:

int main(int argc, const char *argv[]){
    int nextChar = getchar();
    int lines = 0;

    while(nextChar != EOF){
        if(nextChar == '\n'){
            lines++;
        }
        nextChar = getchar();
    }

    printf("%i", lines);
}

Текстовый файл, который я читаю:

Операционная система - это слой сложного программного обеспечения, которое управляет аппаратными ресурсами и предоставляет общий интерфейс для пользователя программы. Популярные настольные операционные системы: Windows macOS Linux

Любая помощь приветствуется!

-4
задан 13 August 2018 в 15:28

4 ответа

Попробуйте использовать

if (nextChar == '\n' || nextChar == '\0')

Пожалуйста, дайте мне знать, если это помогло.

-1
ответ дан 15 August 2018 в 17:04

Файл: Operating.txt

An operating system is a layer of sophisticated software that manages hardware resources and provides a common interface for user programs. Popular desktop operating systems include:

Windows
macOS
Linux

Файл: LineCount.c

#include<stdio.h>
int main(int argc, const char *argv[]){
    int nextChar = getchar();
    int lines = 0;
    while(nextChar != EOF){
        if(nextChar == '\n'){
            lines++;
        }
    nextChar = getchar();
    }

    printf("%i", lines);
}

Команды:

gcc LineCount.c ./a. & lt; Operating.txt

Выход:

gcc LineCount.c

5

0
ответ дан 15 August 2018 в 17:04
  • 1
    Нет, это не аргумент - это перенаправление. Вы можете написать int main(void), потому что вы вообще не используете аргументы. – Toby Speight 13 August 2018 в 19:12
  • 2
    Когда код работает так, как написано, это обычно означает, что вопрос имеет проблему, которая должна быть рассмотрена в комментариях или на нее нельзя ответить (потому что она не воспроизводится кем-либо еще). Сообщение «работает для меня». довольно бесполезно. – ShadowRanger 13 August 2018 в 22:32

Попробуйте следующее:

FILE *fp = fopen("test.txt", "r");
int ch = getc(fp);
int line = 0;
while (ch != EOF) {
    if (ch == '\n' || ch == '\0') {
        line++;
    }
    ch = getc(fp);
}
printf("%i", lines);

. Разница заключается только в добавлении указателя на файл, который я не нашел в вашем коде, и заменил функцию на чтение с помощью getc();

-1
ответ дан 15 August 2018 в 17:04
  • 1
    вы использовали getc не gets – Aidenhjj 13 August 2018 в 14:34
  • 2
    Спасибо, Извините, что из-за автоматического исправления – Kamaldeep singh Bhatia 13 August 2018 в 14:34
  • 3
    Почему код || ch == '\0' указывает конец строки ? – chux 13 August 2018 в 16:57
  • 4
    @chux Когда я работал с файлами, которые я иногда нашел (может быть, они были созданы с помощью другой ОС / Программы), которые char '\0' меняли строку. Я не помню происхождение, но он был найден в некоторых файлах CSV. Просто FYI я долго работал над этими вещами, так что это то, что я знаю. – Kamaldeep singh Bhatia 13 August 2018 в 17:01

Если вы читаете текст из текстового файла, я бы рекомендовал сделать это

char *readFile(char *fileName)
{
     FILE *file = fopen(fileName, "r");
     int c;
     int LineCount=0;

    if (file == NULL)
        return NULL; //could not open file

    while ((c = fgetc(file)) != EOF)
    {
        if((char)c == '\n')
            lineCount++;
    }
    print("Number of lines in the file are %d", lineCount);
}
-1
ответ дан 15 August 2018 в 17:04

Другие вопросы по тегам:

Похожие вопросы: