Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не работает цикл, очень странно..... 
:(
    Опции темы
darkness
Дата 13.11.2006, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



Вот мой код:

Код

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<dos.h>
#include<alloc.h>
#include<math.h>
#define BIB struct bib

BIB
{
 char inic[20];
 char name[20];
 int kol;
 BIB *next;
};
int i, p, l;
int c=0;
const int size=1;
BIB masiv[size];
BIB *now, *cal;


int add_bib(char in[], char na[], int k)
{
  BIB *uk1, *uk2;

  c++;
  strcpy(masiv[c].inic, in);
  strcpy(masiv[c].name, na);
   printf(" %s \n", masiv[c-1].inic);
  masiv[c].kol=k;
   return c;
}

void print_bib()                                        
{

 for(int i=0; i<c; i++)                              //  вся проблема в ЭТОМ!!!!!
 {
 printf(" %d", masiv[c].kol);
 };



}




void srav (int i, int j)
{
  int p, c;
  int i1=i;
  int j1=j;
  int flag;
 while (i!=j)
 {
   if (masiv[i].kol>masiv[j].kol)
   {
     p=masiv[i].kol;
     masiv[i].kol=masiv[j].kol;
     masiv[j].kol=p;
     //i++;
     if (flag==1) flag=0; else flag=1;
   }
   else
   {
    if (flag==0) i++;
    else   j--;

   }

 }

if (i-i1>1) srav(i1, i-1);

 if (j1-j>1)
  {
    if(i-i1<2)srav(i+1,j1);
            else srav(i,j1);
  }

}
main()
{
   add_bib("1", "asdfdasf", 4);
   add_bib("2", "asd", 1);
 //  print_bib();
   add_bib("3", "as", 45);
   add_bib("4", "as", 2);

   printf(" %s", "______________");
   print_bib();

    //printf(" %d\n", c);
   srav(1, c);
   print_bib();

     getch();
   return 0;

}



Вообщем попробовал сделать что-то вроде сортировки структур....  ну а для этого загнал я эти структуры в массив...
Всё бы неплохо, вот только ПЕЧАТЬ не работает - функция print_bib() !!! 
Что здесь не так, НАРОД!!!!!! smile ????????????
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
Rodman
Дата 13.11.2006, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: нет
Всего: 122



Код

void print_bib()                                        
{

 for(int i=0; i<c; i++)                              //  вся проблема в ЭТОМ!!!!!
 {
 printf(" %d", masiv[c].kol);
 };


пошагово запусти и посмотри "С" у тебя правильно передается...

Это сообщение отредактировал(а) Rodman - 13.11.2006, 21:42
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Daevaorn
Дата 13.11.2006, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Для затравочки:
Цитата(darkness @  13.11.2006,  22:29 Найти цитируемый пост)
const int size=1;
BIB masiv[size];

А резюме по коду в целом - читать книжкиsmile

PM MAIL WWW   Вверх
jnb
Дата 13.11.2006, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 4.10.2006

Репутация: нет
Всего: 1



пробуй
masiv[i].kol
вместо
masiv[c].kol
PM MAIL   Вверх
Rodman
Дата 13.11.2006, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: нет
Всего: 122



Код

void print_bib()                                        
{ for(int i=0; i<c; i++)                              //  вся проблема в ЭТОМ!!!!!
    printf(" %d", masiv[i].kol);
};

PM MAIL WWW Skype GTalk YIM MSN   Вверх
darkness
Дата 13.11.2006, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



Цитата(Daevaorn @ 13.11.2006,  21:51)
Для затравочки:
Цитата(darkness @  13.11.2006,  22:29 Найти цитируемый пост)
const int size=1;
BIB masiv[size];

А резюме по коду в целом - читать книжкиsmile

проблема не в этом!!!
попробуй поставить любое значение больше единицы - резалт тот же....

что передаётся парвильно С я уверен....  уже даже успел попробовать распечатать без цикла - просто статически - работает!!!
И ещё меня настораживает, откуда он черпает память для элементов массива, ведь я явно её (malloc, calloc) нигде не выделял....

Добавлено @ 22:01 
Rodman,   МНЕ СТЫДНО!!!!!!!!!!!!!!!!!!!!!!!!!!!


всё - закодился......  
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
witex
Дата 13.11.2006, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 16.10.2006
Где: Эстония

Репутация: 0
Всего: 4



Гы...
Конечно! откуда переменной "c" взять в этой в функции print_bib();если ты её туда даже не передал! темболее ты количество в переменную "с" записываешь в локалку, а в глобальная "с" равна не понятно чему!
add_bib ваабще всегда еденицу возвращает!
Код

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<dos.h>
#include<alloc.h>
#include<math.h>
#define BIB struct bib

BIB
{
 char inic[20];
 char name[20];
 int kol;
 BIB *next;
};
int i, p, l;
int c=0;
const int size=1;
BIB masiv[size];
BIB *now, *cal;


int add_bib(char in[], char na[], int k)
{
  BIB *uk1, *uk2;

  c++;
  strcpy(masiv[c].inic, in);
  strcpy(masiv[c].name, na);
   printf(" %s \n", masiv[c-1].inic);
  masiv[c].kol=k;
   return c;
}

void print_bib(int c)                                        
{

 for(int i=0; i<c; i++)                              //  вся проблема в ЭТОМ!!!!!
 {
 printf(" %d", masiv[i].kol);
 };



}




void srav (int i, int j)
{
  int p, c;
  int i1=i;
  int j1=j;
  int flag;
 while (i!=j)
 {
   if (masiv[i].kol>masiv[j].kol)
   {
     p=masiv[i].kol;
     masiv[i].kol=masiv[j].kol;
     masiv[j].kol=p;
     //i++;
     if (flag==1) flag=0; else flag=1;
   }
   else
   {
    if (flag==0) i++;
    else   j--;

   }

 }

if (i-i1>1) srav(i1, i-1);

 if (j1-j>1)
  {
    if(i-i1<2)srav(i+1,j1);
            else srav(i,j1);
  }

}
main()
{
  с+= add_bib("1", "asdfdasf", 4);
  с+= add_bib("2", "asd", 1);
 //  print_bib();
   с+=add_bib("3", "as", 45);
   с+=add_bib("4", "as", 2);

   printf(" %s", "______________");
   print_bib(c);

    //printf(" %d\n", c);
   srav(1, c);
   print_bib(c);

     getch();
   return 0;

}

попробуй так!  не пробовал! но должна работать!
--------------------
Я не волшебник, я только учусь."Шлёпни в Гугл" - Афтор Былов Ю.М. 
PM MAIL   Вверх
darkness
Дата 13.11.2006, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



witex, позволь тебе возразить.


если ты с print_bib() произведёшь следующие изменения:

Код

void print_bib()
{
 printf(" [%d] ",  c );
 for(int i=0; i<c; i++)
 {
 printf(" %d", masiv[i].kol);
 };



то сам увидишь что значение С передаётся....
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
Rodman
Дата 13.11.2006, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: нет
Всего: 122



Цитата(witex @  13.11.2006,  22:20 Найти цитируемый пост)
Конечно! откуда переменной "c" взять в этой в функции print_bib();если ты её туда даже не передал!


"C" глобальная.. она сама по себе доступна из любого места
PM MAIL WWW Skype GTalk YIM MSN   Вверх
darkness
Дата 13.11.2006, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



Код неправелен ещё и в том что под массив (его эллементы) не отводится память....

вот что я предпринял:
Код

int add_bib(char in[], char na[], int k)
{
 BIB *uk1;
    c++;

   uk1=(BIB*)calloc(size, sizeof(BIB));   //
    masiv[c]=*uk1;                                  //
  strcpy(masiv[c].inic, in);
  strcpy(masiv[c].name, na);
   printf(" %s \n", masiv[c-1].inic);
  masiv[c].kol=k;
   return c;
}


насколько это правильно?
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
witex
Дата 14.11.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 16.10.2006
Где: Эстония

Репутация: 0
Всего: 4



Ну да, доступна! ток зачем её в каждой функции объявлять?
Он тогда становиться локальной и  и её значение ни как не передаёться в глобальную!
--------------------
Я не волшебник, я только учусь."Шлёпни в Гугл" - Афтор Былов Ю.М. 
PM MAIL   Вверх
Rockie
Дата 14.11.2006, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(darkness @  13.11.2006,  21:59 Найти цитируемый пост)
И ещё меня настораживает, откуда он черпает память для элементов массива, ведь я явно её (malloc, calloc) нигде не выделял....

выделял:
Код
const int size=1;   // 4
BIB masiv[size];

Цитата(darkness @  13.11.2006,  21:29 Найти цитируемый пост)
Всё бы неплохо, вот только ПЕЧАТЬ не работает - функция print_bib() !!! Что здесь не так, НАРОД!!!!!!  ????????????

Код
int add_bib(char in[], char na[], int k)
{
  strcpy( masiv[c].inic, in);
  strcpy( masiv[c].name, na);
  masiv[c].kol = k;
  printf(" %s \n", masiv[c].inic);
  c++;                  <----------------

  return c;         
}

void print_bib()
{
    for(int i=0; i<c; i++)                              
     printf("%d ", masiv[i].kol);
}



--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Daevaorn
Дата 14.11.2006, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Rockie @  14.11.2006,  22:29 Найти цитируемый пост)
выделял:

код C++
1:
2:

const int size=1;   // 4
BIB masiv[size];

Издеваешься?smile

Код

#include <stdio.h> // пробелы желательно ставить
#include <conio.h>
#include <string.h>
#include <dos.h>
#include <math.h>

#define BIB struct bib // Накой?! Так не пишут

struct Bib
{
    char inic[20];
    char name[20];
    int kol;
    Bib *next;// зачем?!
};

int i, p, l;
int c = 0;

const int size = 10; // Было 1. Массив из одного элемента был. Бред!
Bib masiv[ size ];

Bib *now, *cal; // зачем это?!


int add_bib( const char *in, const char* na, int k )
{
    Bib *uk1, *uk2; // это тоже не понятно зачем
    if( c >= size )// массив кончился
        return -1;

    strncpy( masiv[ c ].inic, in, 20 ); // не забываем , что строки не резиновые
    strncpy( masiv[ c ].name, na, 20 );
    printf( " %s \n", masiv[ c ].inic );
    masiv[ c ].kol = k;
    ++c;
    return c;
}

void print_bib()                                        
{
    for( int i = 0; i < c; ++i )// счетчик у тебя "i", а не "с"
        printf( " %d\n", masiv[ i ].kol );
}

// далее вообще сказка, а  не код:)
void srav (int i, int j)
{
    int p, c;
    int i1=i;
    int j1=j;
    int flag;
    while (i!=j)
    {
        if (masiv[i].kol>masiv[j].kol)
        {
            p=masiv[i].kol;
            masiv[i].kol=masiv[j].kol;
            masiv[j].kol=p;
            //i++;
            if (flag==1) flag=0; else flag=1;
        }
        else
        {
            if (flag==0) i++;
            else   j--;

        }

    }

    if (i-i1>1) srav(i1, i-1);

    if (j1-j>1)
    {
        if(i-i1<2)srav(i+1,j1);
        else srav(i,j1);
    }

}
int main()// main всегда(!) возвращает int
{
    add_bib("1", "asdfdasf", 4);
    add_bib("2", "asd", 1);
    //  print_bib();
    add_bib("3", "as", 45);
    add_bib("4", "as", 2);

    printf(" %s\n", "______________");
    print_bib();

    //printf(" %d\n", c);
    //srav(1, c); // не зови её!
    //print_bib();

    //getch();
    return 0;
}

Совет тот же - читать книги.
PM MAIL WWW   Вверх
Rockie
Дата 14.11.2006, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(Daevaorn @  14.11.2006,  21:48 Найти цитируемый пост)
Издеваешься?

Daevaorn, впринцыпе.. нет smile
Даже в случае единицы у товарища бы отработала эта функция хотя бы раз, проблема была в том что он инкрементировал 'c' и обращался к masiv[1] а не masiv[0].

Цитата(darkness @  13.11.2006,  21:29 Найти цитируемый пост)
int add_bib(char in[], char na[], int k)
{
  BIB *uk1, *uk2;

  c++;
  strcpy(masiv[c].inic, in);
  strcpy(masiv[c].name, na);
   printf(" %s \n", masiv[c-1].inic);
  masiv[c].kol=k;
   return c;
}





Это сообщение отредактировал(а) Rockie - 14.11.2006, 22:23


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Rover
Дата 15.11.2006, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.11.2006

Репутация: нет
Всего: нет



Вообще в функциях лучше не использовать глобальные переменные.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0605 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.