Printf противоречивые результаты [Язык программирования C - Глава 1.6 Массивы] - PullRequest
0 голосов
/ 05 декабря 2018

При запуске программы, представленной в главе 1.6 «Массивы языка программирования C», я получаю некоторые очень противоречивые результаты из окончательного printf.

Вот программа:

#include <stdio.h>

int main()
{
  int c, 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' && c <= '9')
        ++ndigit[c-'0'];
    else if (c == ' ' || c == '\n' || c == '\t')
        ++nwhite;
    else
        ++nother;
  }

  printf("digits =");

  for (i = 0; i < 10; ++i)      
    printf(" %d", ndigit[i]);

  printf(" white space = %d \n nother = %d \n", nwhite, nother);
}

Вотисполнение: Windows PowerShell

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

Спасибо.


РЕДАКТИРОВАТЬ:

Я пытался запустить программу в командной строке, в отличие от Windows PowerShell.Никаких различий в результатах.

Также я попытался добавить int в начале основного

  int k = 99;

и двух printf до и после финального printf

  printf("%d", k);
  printf(" white space = %d \n nother = %d \n", nwhite, nother);
  printf("%d", k);

Печатается только первый из двух дополнительных printf, но за счет еще 2 символов из среднего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...