Что я должен ожидать от "Языка программирования C" 2-е издание (1991). Пример внутри объяснения - PullRequest
4 голосов
/ 27 июня 2011

У меня была эта книга "Второе издание языка программирования C" (испанская версия) в течение нескольких лет, я недавно решил, что попробую. Это был бы мой первый язык программирования, и да, я знаю, что для начинающих это непросто, мне нравятся проблемы. Дело в том, что, к счастью, я нашел некорректно работающий пример (см. Ниже) .

Следующий код должен подсчитывать и отображать счет каждый раз, когда изменяется nc. Дело в том, что printf на самом деле ничего не печатает. Изменение EOF на 1 и ввод его также не приведет к завершению программы.

#include <stdio.h>
main()
{
      long nc;
      nc = 0;
      while(getchar() != EOF)
            ++nc;
            printf("%ld\n", nc);
}

Вопрос: Должен ли я быть в курсе любых «недавних» изменений в C? . Эта книга с 1991 года, 20 лет ... (вау, я старею)

Ответы [ 3 ]

2 голосов
/ 27 июня 2011

Если вы хотите печатать после каждой итерации, вы должны заключить время в квадратные скобки.

  while(getchar() != EOF)
  {
        ++nc;
        printf("%ld\n", nc);
  }

Если вы хотите «прервать» какое-то время (отправить EOF), вам нужны CTRL-D или CTRL-Z.

В любом случае, если в книге не указаны скобки, сделайте отступ в следующем виде:

  while(getchar() != EOF)
        ++nc;
  printf("%ld\n", nc);
1 голос
/ 27 июня 2011

Вы можете добавить несколько браслетов:

while(getchar() != EOF) {
    ++nc;
    printf("%ld\n", nc);
}

При каждом вводе символа будет печататься значение nc.

0 голосов
/ 27 июня 2011

предложение cnictuar - именно так выглядит этот фрагмент кода в моем английском издании в мягкой обложке, 17-е издание.Возможно, отступ в испорченном переводе испорчен, но это похоже на забавную вещь.

В C99 есть много новых функций, но те, которые япо-настоящему довольны:

  • именованные инициализаторы:

    struct {int a, b, c, d;} s =
    { .a = 1, .c = 3, 4, .b = 5};
    
  • объявления в for циклах:

    for (int i; i<foo; i++) { ... }
    
  • Инициализаторы для автоагрегатов могут быть неконстантными выражениями:

    void foo(int n) {
        int arr[n];
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...