[c] Помогите подправить программу, нужно пошаманить с порядком вывода

Тема в разделе "C/C++/C#", создана пользователем Rydj, 12 май 2011.

  1. Rydj

    Rydj Гость

    Доброго времени суток. Можете помочь немного с программой, сам код уже написан но нужно при выводе на экран поменять порядок вывода битов.


    Код (C++):
    #include <stdio.h>
    #include <stdlib.h>

    typedef struct
    {
    FILE *f;
    unsigned char c;
    int pos;
    char md;
    } BSTREAM;

    int getbit(BSTREAM*s)
    {
    if(s->pos>7)
    {
    int ch;
    ch=getc(s->f);
    if(ch==-1)
    return -1;
    s->c=ch;
    s->pos=0;
    }
    int r;
    r=(s->c>>s->pos)&1;
    s->pos++;
    return r;
    }

    BSTREAM * bopen(FILE *f,const char*mode)
    {
    BSTREAM*s;
    if ((s=malloc(sizeof(BSTREAM)))==NULL)
    return 0;

    s->pos=0;
    s->md=mode[0];
    s->c=0;
    s->f=f;
    return s;
    }

    int main()
    {
    int b=0;
    BSTREAM *s = bopen(stdin,"r");
    while(1)
    {
    b=getbit(s);
    printf("%d\n",b);
    if(b==-1)
    break;
    }

    printf("%d",b);
    }
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Где не получается?
     
  3. Rydj

    Rydj Гость

    Нужен цикл for или while. Проблема в том что например там 4 раскладывается как 00110101 а надо 10101100
     
  4. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Поставлю вопрос по другому. Что ты сам пытался сделать и что получилось?
     
  5. Rydj

    Rydj Гость

    main пытался создать цикл но максимально что получилось-это просто цифры по порядку от 7 до 0. а нужно 8 раз вызвать функцию и показать в обратном порядке
     
  6. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Код (C++):
    int getbit( BSTREAM *s )
    {
    int r;
    if ( s->pos > 7 ) {
    int ch;
    ch = getc( s->f );
    if ( ch == -1 ) return -1;
    s->c = ch;
    s->pos = 0;
    }
    r = (s->c >> (7 - s->pos)) & 1;
    s->pos++;
    return r;
    }
     
  7. Rydj

    Rydj Гость

    Огромное спасибо, все гениальное просто =)
     
Загрузка...

Поделиться этой страницей