@IndusDev

Что означает этот кусок кода?

#include <stdio.h>

/* подсчет цифр, символов-разделителей и прочих символов */
int main(void)
{
        int c, i, nwhite, nother;
        int ndigit[10];

        nwhite = nother = 0;
        for (i = 0; i < 10; ++i)
                ndigit[i] = 0;

        while ((c = getchar()) != EOF)
////// ________________________________
                if (c >= '0' && c <= '9')
                        ++ndigit[c - '0'];
////// ^^^^^^^^^^^^^^^^^^^^^^^^^^
                else if (c == ' ' || c == '\n' || c == '\t')
                        ++nwhite;
                else
                        ++nother;

        printf("Цифры =");
        for (i = 0; i < 10; ++i)
                printf(" %d", ndigit[i]);
        printf(", символы разделители = %d, прочие = %d\n", nwhite, nother);

        return 0;
}

Непонятный кусок именно
if (c >= '0' && c <= '9')
++ndigit[c - '0'];
Зачем мы прописываем [c - '0'], а не [c]?
  • Вопрос задан
  • 1423 просмотра
Решения вопроса 2
longclaps
@longclaps
Затем, что '0' == 48, а индексация массива ndigit (как и любого другого) идёт с нуля.
Ответ написан
Комментировать
AxianLTD
@AxianLTD
Потому что введенный символ это код по таблице кодировки, а нам нужно сделать индекс массива в диапазоне от 0 до...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
TrueBers
@TrueBers
Гуглю за еду
По уму это делается так:
#include <ctype.h>

if( isdigit( c ) )
  ++ndigit[c - '0'];
else if( isspace( c ) )
  ++nwhite;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы