Этот вопрос закрыт для ответов, так как повторяет вопрос Объясните принцип работы цикла из учебника Кернигана?
@Whomai

Обьясните, что здесь происходит ++ndigi[c-'0']?

Вот код, который считвает числа во входном потоке ( пример из учебника Кернигана " программирование на Си"
#include

int main()
{
int nidigi[10],c,i;
for(i=0;i<10;++i)
nidigi[i]=0;

while ((c=getchar()) != EOF)
{
if(c>='0' && c<='9')
nidigi[c-'0']=nidigi[c-'0']+1;
printf("digits=")''
for (i=0;i<10;++i)
printf("%d",nidigi[i]);

}
return 0;
}
Что означает вот эта запись nidigi[c-'0']=nidigi[c-'0']+1; ? Не могу понять в особенности внутри скобок. Мы отнимаем от символа( если оно число) число ноль или как ?
  • Вопрос задан
  • 123 просмотра
Ответы на вопрос 3
@res2001
Developer, ex-admin
Выражение (c-'0') возвращает индекс в массиве nidigi[10].
В переменной
char c;
лежит ASCII код введенного символа (цифры), если из этого кода вычесть ASCII код символа '0', то получите цифру от 0 до 9, что и требуется. Чтоб удостоверится посмотрите таблицу ASCII кодов.
В массиве nidigi в итоге количество вхождений десятичных цифр во входных данных - гистограмма.
Ответ написан
@Mercury13
Программист на «си с крестами» и не только
'0' — это не число 0, а код символа «0». Во всех машинах, кроме совсем уж мамонтов, используются надмножества кодировки ASCII, и '0' = 48.

И в ASCII, и в EBCDIC, и во внутренних кодировках, скажем, ЖК-индикаторов коды цифр идут последовательно от 0 до 9 — так что, отняв от кода цифры код символа «0», получаем числовое значение цифры.
То есть ,
'0' - '0' = 48 - 48 = 0
'1' - '0' = 49 - 48 = 1
...
'9' - '0' = 57 - 48 = 9
(цифры справедливы для ASCII и его надмножеств, но в EBCDIC аналогично)

В компьютере вообще нет понятия «символ», и что такое 48 — сорок восемь попугаев, X-координата на экране или код символа '0' — программист или компилятор должен думать сам. Так что Си (который, по сути, кроссплатформенный ассемблер), а ним и Java ставят очень эфемерную грань между одним и другим. В отличие от Паскаля, где надо писать Ord(c) - Ord('0').
Ответ написан
@Whomai Автор вопроса
Можете поподробнее о выражении с-'0'? Я все еще не понимаю. Желательно привести пример. ( и у меня not c)
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы