Консоль не отображает гистограмму - PullRequest
0 голосов
/ 12 сентября 2009

Я запустил следующий код, но на консоли ничего не появилось ....

#include <stdio.h>

#define MAXWORDLEN 10

int main(void)
{
  int c;
  int inspace = 0;
  long lengtharr[MAXWORDLEN + 1];
  int wordlen = 0;

  int firstletter = 1;
  long thisval = 0;
  long maxval = 0;
  int thisidx = 0;
  int done = 0;

  for(thisidx = 0; thisidx <= MAXWORDLEN; thisidx++)
  {
    lengtharr[thisidx] = 0;
  }

  while(done == 0)
  {
    c = getchar();

    if(c == ' ' || c == '\t' || c == '\n' || c == EOF)
    {
      if(inspace == 0)
      {
        firstletter = 0;
        inspace = 1;

        if(wordlen <= MAXWORDLEN)
        {
          if(wordlen > 0)
          {
            thisval = ++lengtharr[wordlen - 1];
            if(thisval > maxval)
            {
              maxval = thisval;
            }
          }
        }
        else
        {
          thisval = ++lengtharr[MAXWORDLEN];
          if(thisval > maxval)
          {
            maxval = thisval;
          }
        }
      }
      if(c == EOF)
      {
        done = 1;
      }
    }
    else
    {
      if(inspace == 1 || firstletter == 1)
      {
        wordlen = 0;
        firstletter = 0;
        inspace = 0;
      }
      ++wordlen;
    }
  }

  for(thisval = maxval; thisval > 0; thisval--)
  {
    printf("%4d  | ", thisval);
    for(thisidx = 0; thisidx <= MAXWORDLEN; thisidx++)
    {
      if(lengtharr[thisidx] >= thisval)
      {
        printf("*  ");
      }
      else
      {
        printf("   ");
      }
    }
    printf("\n");
  }
  printf("      +");
  for(thisidx = 0; thisidx <= MAXWORDLEN; thisidx++)
  {
    printf("---");
  }
  printf("\n       ");
  for(thisidx = 0; thisidx < MAXWORDLEN; thisidx++)
  {
    printf("%2d ", thisidx + 1);
  }
  printf(">%d\n", MAXWORDLEN);

  return 0;
}

Ответы [ 5 ]

3 голосов
/ 12 сентября 2009

getchar по-прежнему является int по стандартам POSIX и C . Вы забыли включить stdio.h или что-то, что переопределяет его? Этот пример работает для меня:

#include <stdio.h>
int main()
{
  int c;
  c = getchar();
}
1 голос
/ 12 сентября 2009

http://codepad.org/Fp8kmzbv

Он отлично компилируется и работает @codepad. Каков ваш компилятор, ваши параметры компиляции и как вы его используете?

И запуск на моем домашнем компьютере:

$ gcc-trunk --version
gcc-trunk (GCC) 4.5.0 20090907 (experimental)

$ gcc-trunk -Wall -ansi -Wall -W -pedantic tt.c
tt.c: In function ‘main’:
tt.c:73:5: warning: format ‘%4d’ expects type ‘int’, but argument 2 has type ‘long int’

$ ./a.out
This is a test of your histogram program.
   3  |          *
   2  |    *     *
   1  | *  *     *           *  *
      +---------------------------------
        1  2  3  4  5  6  7  8  9 10 >10

Так что он все равно должен делать то, что вы хотите, при условии, что вы запускаете его правильно (как консольное приложение в консоли).

1 голос
/ 12 сентября 2009

getchar () - это макро функция. Возможно, вам не хватает нужного включаемого файла.

В крайнем случае,

#ifndef getchar
#define getchar() getc(stdin)
#endif
0 голосов
/ 12 сентября 2009

возможно, вам нужно вызвать fflush (stdout) в конце вашей программы, чтобы очистить вывод консоли.

0 голосов
/ 12 сентября 2009

Мне любопытно, если вы имеете в виду getch () как проблему.

4 месяца назад была дискуссия о getch (), которая может быть полезна: getch устарела

Во втором ответе предлагается getchar (), поэтому он не должен возвращать ошибку, но это также зависит от того, какой компилятор вы используете.

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