Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
5 / 5 / 1
Регистрация: 20.05.2012
Сообщений: 174
1

Нерабочий код в книге - Брайан Керниган и Деннис Ритчи

06.02.2014, 01:40. Показов 3365. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Читаю эту книгу и уже не первый раз встречаю нерабочий код. Либо я что-то не понимаю, либо код реально устарел и стал нерабочим. Вот собственно код:
Миниатюры
Нерабочий код в книге - Брайан Керниган и Деннис Ритчи  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.02.2014, 01:40
Ответы с готовыми решениями:

Нужны объяснения примеров из книги "Язык программирования Си" Брайан Керниган, Деннис Ритчи
Добры день. Начал читать книгу "Язык программирования Си" Брайан Керниган, Деннис Ритчи; для...

Ритчи и Керниган
В этом учебники в некоторых примерах прототип функции объявляется внутри другой функции. Доля того,...

Керниган Ритчи Упражнение 2.2
Добрый день. Помогите начинающему разобраться пожалуйста. Само задание я решил, но...

Указатели, Керниган и Ритчи 5.4
Здравствуйте, нужна помощь начинающему. Читаю Керниган и Ритчи и не могу понять следующую вещь:...

6
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
06.02.2014, 02:09 2
Угу. Вот же бездельники: Unix у них работает, а пример из пяти строчек - ни в какую.

Вот, перепечатал за вас.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/* подсчет цифр, символов-разделителей и прочих символов */
int main(int argc,char** argv)
{
   int c, i, nwhite, nother;
 
   int ndigit[10];
 
   nwhite = 0;
   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);
 
// В результате выполнения этой программы будет напечатан следующий результат:
// цифры =9300000001, символы-разделители = 123, прочие = 345
 
   return 0;
}
Результат для моего текста:
цифры = 19 6 2 3 2 2 0 1 1 2, символы-разделители = 2761, прочие = 0
1
244 / 155 / 48
Регистрация: 03.04.2013
Сообщений: 317
06.02.2014, 03:07 3
Цитата Сообщение от gazlan Посмотреть сообщение
c = ' '
И будет все числа в разделители считать.
Цитата Сообщение от gazlan Посмотреть сообщение
!= EOF
На сколько я знаю EOF макрос который равен -1 (Код символа окончания файла). На 1 букву 1 итерация цикла. Когда произойдет выход из цикла?
Лучше сделать считывание строки отдельно, потом цикл по подсчету символов отдельно.
0
Заблокирован
06.02.2014, 03:12 4
Всё рабочее. Вопрос в том, какую строку скормить на вход. Скормим программе файл и вуаля
Bash
1
2
[quest@cyberhost]$ cat testfile.zip |./a.out 
цыфры =  9 3 0 0 0 0 0 0 0 1, символы разделители = 123, прочие = 345
Вложения
Тип файла: zip testfile.zip (481 байт, 11 просмотров)
0
Заблокирован
06.02.2014, 03:13 5
Размер файла равен 345 + 123 + 9 + 3 + 1
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
06.02.2014, 10:34 6
Цитата Сообщение от Alex566 Посмотреть сообщение
Насколько я знаю
1. Код K&K совершенно корректен

2. TS не спрашивал совета, как это написать иначе, его интересовал именно пример из книги.
0
244 / 155 / 48
Регистрация: 03.04.2013
Сообщений: 317
07.02.2014, 03:37 7
Цитата Сообщение от gazlan Посмотреть сообщение
1. Код K&K совершенно корректен
2. TS не спрашивал совета, как это написать иначе, его интересовал именно пример из книги.
Тогда можно было просто объяснить как ставить символ с кодом -1 в ответ на мой вопрос "Когда произойдет выход из цикла?". Это по сути и нужно было узнать автору. Порылся в интернете нашел подобные темы на которые дали ответ что символ EOF (-1) ставится комбинацией ctrl+z+любая клавиша.
0
07.02.2014, 03:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.02.2014, 03:37
Помогаю со студенческими работами здесь

Керниган/Ритчи упражнение 1.22
&quot;Упражнение 1.22. Напишите программу, печатающую символы входного потока так, чтобы строки текста...

Компилятор С(Керниган ,Ритчи)
Здравствуйте! Открыл книгу Брайана Кернигана и Денниса Ритчи. Первое задание MAIN()...

Керниган/ритчи задачи 1.18
Упражнение 1.18. Напишите программу, которая будет в каждой вводимой строке заменять стоящие подряд...

Керниган/Ритчи упражнение 1.20
&quot;Упражнение 1.20. Напишите программу detab, заменяющую символы табуляции во вводимом тексте нужным...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru