Подсчет количества символов на языке C - PullRequest
1 голос
/ 15 февраля 2020

Я новичок в C языке, и теперь пытаюсь подсчитать количество вводимых символов.

#include <stdio.h>

main()
{
    long nc;
    nc = 0;
    while (getchar() != EOF)
        ++nc;
    printf("%1d\n", nc);
}

Это то, что я написал так же, как пишет мой учебник, но функция printf не кажется, не работает.

Кроме того, эта программа, кажется, не заканчивается sh, потому что приглашение не появляется.

Я понятия не имею, если это содержимое книга достаточно старая.

Не могли бы вы сказать, что не так с этим кодом?

1 Ответ

3 голосов
/ 15 февраля 2020

Это похоже на код из K & R C Язык программирования, 2nd Edn (1988), глава 1, стр. 18.

Проблема в том, что ваша транскрипция кода неверно истолковывает %ld как %1d. Учитывая, что nc имеет тип long, вам нужно %ld (буква ell), а не %1d (di git one). Книга содержит ell, а не единицу.

При подходящих параметрах компиляторы, такие как G CC и Clang, будут выдавать предупреждения о несовпадении типов в строках формата. Используйте -Wall -Werror для получения ошибок при неправильном коде (или -Wformat, если вы не можете работать с -Wall - но я использую -Wall -Wextra -Werror плюс несколько дополнительных опций для всех моих компиляций; я не буду рисковать ошибки, о которых мне может рассказать компилятор).

Использование main() показывает, что книга устарела. C99 требует тип возвращаемого значения и предпочитает void в списке аргументов - int main(void) - когда вы не используете аргументы командной строки.

Что касается программы, не завершающей работу, когда вы печатаете в терминале вы указываете EOF (конец файла) для программы, набирая Control-D в большинстве Unix -подобных систем (хотя это настраивается) и Control-Z в Windows системах. (Если вы хотите указать EOF без предварительного ввода новой строки, вам нужно набрать EOF индикатор дважды вместо одного раза.) Или вы можете передать ему файл из оболочки: counter < data-file (при условии программа называется counter и вы хотите посчитать символы в файле data-file).

...