Подсчет кода символа в C - PullRequest
0 голосов
/ 25 мая 2011

Хорошо, я только изучаю C и наткнулся на этот тренировочный код, чтобы посчитать книгу персонажа K & R:

#include <stdio.h>
/* count characters in input; 2nd version */
main()
{
    double nc;
    for (nc = 0; getchar() != EOF; ++nc)
        ;
    printf("%.0f\n", nc);
}

Проблема в том, что я не знаю, предполагается ли выводить количество символов или нет, когда я вводил какой-либо символ, потому что нет никакого вывода, просто пробел (getchar() ожидает другого ввода).

Может кто-нибудь объяснить мне, что происходит? Я практикуюсь в bash, используя vim в openSUSE 11.3.

Ответы [ 3 ]

5 голосов
/ 25 мая 2011

Вы должны отправить сигнал / символ EOF в программу. Если вы запускаете его из окна терминала, нажмите Ctrl + D .

Если вы работаете с файлом, например, так:

./my_program < input_file_name

тогда он будет работать автоматически.

1 голос
/ 25 мая 2011

Поскольку он проверяет EOF, нажмите Ctrl-D в терминале.

0 голосов
/ 25 мая 2011

Как уже упоминалось, вы должны нажать control - d (он же ^d), но это работает только после того, как вы нажмете return .Другими словами, вы не можете набрать «foo control - d » и ожидать, что это сработает."foo return control - d " будет работать, хотя.

Также обратите внимание, что K & R - отличная книга, но она написанадесятилетия назад.Представленный алгоритм подсчета работает только на входе ASCII-кода.Широкие символы (UTF-8 и т. Д.) Не будут считаться правильно.

Также обратите внимание, что в приведенном вами примере используется число с плавающей запятой для этого подсчета.В этом нет ничего страшного, но для скорости и эффективности большинство людей будет использовать неподписанные целочисленные значения, длинные или другие типы интегральных данных.Вы вряд ли будете читать reading-го символа!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...