Решено: Язык Си (странная ошибкы в вычмслении)

Модератор: Модераторы разделов

Аватара пользователя
Славик
Сообщения: 159
ОС: AltLinux2.4 master

Решено: Язык Си

Сообщение Славик »

Есть код из книги Кернигана и Ричи "Язык программирования C":

Код: Выделить всё

   #include <stdio.h>

   main()
   {

    long nc;

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

   }


а вот пример вызова:

Код: Выделить всё

   $ echo "cccc" | ./a.out
   5


Почему результат больше предполагаемого?
Познание бесконечности требует бесконечного времени.
А. и Б. Стругацкие
Понедельник начинается в субботу
Спасибо сказали:
Аватара пользователя
anonymous.ru
Сообщения: 614

Re: Решено: Язык Си

Сообщение anonymous.ru »

:)
echo -n "cccc"
:drinks:
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Решено: Язык Си

Сообщение Liksys »

потому, что в строку "cccc" входит еще один сиовол - новой строки: "cccc\n" :)
Спасибо сказали:
Аватара пользователя
Славик
Сообщения: 159
ОС: AltLinux2.4 master

Re: Решено: Язык Си

Сообщение Славик »

:crazy: Ну надо ж было так лопухнуться! Точно, конец строки тоже посчитался. :tongue:
Познание бесконечности требует бесконечного времени.
А. и Б. Стругацкие
Понедельник начинается в субботу
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Решено: Язык Си

Сообщение sergio »

Darth Liksys писал(а):
08.09.2007 15:41
потому, что в строку "cccc" входит еще один сиовол - новой строки: "cccc\n" :)

Полагаю, что утверждение некорректно.
echo по умолчанию добавляет символ новой строки к концу вывода; как заметил anonymous.ru это умолчание отключается опцией -n
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Решено: Язык Си

Сообщение Liksys »

Корректно, Читай внимательнее. Я имел ввиду исходную строку без опции, а не то, что имел ввиду anonymous.ru
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Решено: Язык Си

Сообщение sergio »

Darth Liksys писал(а):
08.09.2007 17:31
Корректно, Читай внимательнее. Я имел ввиду исходную строку без опции, а не то, что имел ввиду anonymous.ru

Что именно я прочел невнимательно? Поясни пожалуйста, так и не понял, что ты имел в виду.
С какой радости
потому, что в строку "cccc" входит еще один сиовол - новой строки: "cccc\n
:wacko:
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Решено: Язык Си

Сообщение Uncle_Theodore »

Имелось в виду, что в строку, сгенерированную командой echo "cccc", помимо четырех 'c' входит еще символ конца строки.
Схоластикой занимаемся?
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Решено: Язык Си

Сообщение sergio »

Uncle_Theodore писал(а):
08.09.2007 18:22
Имелось в виду, что в строку, сгенерированную командой echo "cccc", помимо четырех 'c' входит еще символ конца строки.
Схоластикой занимаемся?

Эта формулировка корректна и понятна, спасибо. :tongue:
Нет, я пытался понять, с какого конца надо постигать дао, что

Код: Выделить всё

потому, что в строку "cccc" входит еще один сиовол - новой строки: "cccc\n"

Больше не будим, дядюшка. :happy:
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Решено: Язык Си

Сообщение v04bvs »

sergio писал(а):
08.09.2007 19:25
Нет, я пытался понять, с какого конца надо постигать дао, что

Код: Выделить всё

потому, что в строку "cccc" входит еще один сиовол - новой строки: "cccc\n"

Ключевыми здесь является базовые навыки телепатии :rolleyes:
Спасибо сказали:
Аватара пользователя
Славик
Сообщения: 159
ОС: AltLinux2.4 master

Re: Решено: Язык Си

Сообщение Славик »

Друзья! Отставить перебранку! :happy: Вопрос решен с первых двух сообщений. Всем спасибо!
Познание бесконечности требует бесконечного времени.
А. и Б. Стругацкие
Понедельник начинается в субботу
Спасибо сказали: