Войти

Показать полную графическую версию : Учю Си :). Не понимаю, что делает оператор. Help.


Guest
07-09-2004, 22:35
#include <stdio.h>
/* подсчет цифр, символов-разделителей и прочих символов */
main()
{
   int с, 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' && с <= '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);
}

Что сие означатет " ++ndigit[c – '0'];" ?


Исправлено: hasherfrog, 11:44 8-09-2004

Pasechnik
08-09-2004, 00:44
В переменной с - код введенного символа. Потом от неё отнимают код символа '0' (нуль), следовательно результатом будет сама введенная цифра (а не её ASCII-код). А потом увеличивают элемент массива с индексом, соответствующим введенной цифре, на единицу.

Guest
08-09-2004, 02:28
То есть, как я понял, ascii значение переэтовает в двоичный код, пересылается в регистер, отнимается от туда 0, и на переменную с перезаписывается уже не ascii код цифры, а двоичный код этой цифры?
Никогда и нигде не происходит обратного преобразования в ascii?

hasherfrog
08-09-2004, 12:07
Guest
(c – '0') - вычисление числа из ascii-кода цифры.
(ndigit[c – '0']) - обращение к ячейке массива, соответствующей цифре.
(++ndigit[c – '0'];) - увеличение этой ячейки на 1.
Т.о. идёт подсчёт количества встреченных ascii-кодов, соответствующих каждой цифре 0-9, т.е. для каждой цифры свой счётчик.




© OSzone.net 2001-2012