Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2012, 17:21   #1
shrek1993
Пользователь
 
Регистрация: 24.10.2010
Сообщений: 67
По умолчанию Найди 5 косяков

прога пишет 0-ошибок 0-предупреждений и встаёт на бесконечный цикл найдите и скажите мне в чём косяк пожалуйста...

void sort()
{
biblioteka st1,st2;
FILE *in;
int f;
in=fopen("books.dat", "r+b");
if (in)
{

do{f=0;
rewind(in);
fread(&st1,sizeof(biblioteka),1,in) ;
while (!feof(in))
{fread(&st2,sizeof(biblioteka),1,in );
if (strcmp(st1.aftor,st2.aftor)>0)
{fseek(in,(-2)*sizeof(biblioteka),1);
fwrite(&st2,sizeof(biblioteka),1,in );
fwrite(&st1,sizeof(biblioteka),1,in );
f=1;
}
fseek(in,(-1)*sizeof(biblioteka),1);
fread(&st1,sizeof(biblioteka),1,in) ;
}
}while(f!=0);
fclose(in);
}
else cout<<"Такого файла нет!";
}
Если я нарушил какие-либо правила прошу простить и сообщить...
shrek1993 вне форума Ответить с цитированием
Старый 15.04.2012, 17:33   #2
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Занесите код в тег [CODE], отформатируйте его и покажите класс biblioteka
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 15.04.2012, 17:40   #3
shrek1993
Пользователь
 
Регистрация: 24.10.2010
Сообщений: 67
По умолчанию

Код:
#include <iostream>
#include <fstream>
#include <windows.h>
#include<string.h>
#include<iomanip>
#include<stdio.h>
using namespace std;

struct  biblioteka {
    char  aftor[10],
          book[10],
          isd[10];
    int   god,
		  ctr;
}; 

int vvod()
{
  ifstream in;
  ofstream out("books.dat", ios::binary); 
  biblioteka st;
  in.open("books.txt");
    int  k=0;
  if (in)
  { 
   while (!in.eof())
   {
	   in>>st.aftor;
	  in>>st.book;
	  in>>st.isd;
	  in>>st.god;
	  in>>st.ctr;
	  out.write((char*)&st,sizeof(biblioteka));	
      k++;
    }
    in.close();
	out.close();
    }
   else cout<<"Такого файла нет!\n";
   return k;
}
void sort()
{
  biblioteka st1,st2;
  FILE *in;
  int f;
  in=fopen("books.dat", "r+b");
  if (in)
  {
 
   do{f=0; 
		rewind(in);
		fread(&st1,sizeof(biblioteka),1,in);
	    while (!feof(in))
		 {fread(&st2,sizeof(biblioteka),1,in);
	      if (strcmp(st1.aftor,st2.aftor)>0)
		     {fseek(in,(-2)*sizeof(biblioteka),1);
		      fwrite(&st2,sizeof(biblioteka),1,in); 
		      fwrite(&st1,sizeof(biblioteka),1,in);
			  f=1;
		     }
	      fseek(in,(-1)*sizeof(biblioteka),1);
		  fread(&st1,sizeof(biblioteka),1,in);
		  }
	 }while(f!=0);
   fclose(in);
   }
 else cout<<"Такого файла нет!";  }
}
Если я нарушил какие-либо правила прошу простить и сообщить...

Последний раз редактировалось shrek1993; 15.04.2012 в 17:44.
shrek1993 вне форума Ответить с цитированием
Старый 15.04.2012, 17:46   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

shrek1993,
Вот Вы накидали шаманских заклинаний и спрашиваете, почему волшебство не работает.
Не правильнее ли будет спросить, как отыскивать ошибки самому.
Умеете пользоваться пошаговой отладкой? С ее помощью самому можно найти почему нет выхода из цикла.
А сейчас получается, что Вы просите сделать это за Вас.
EUGY вне форума Ответить с цитированием
Старый 15.04.2012, 17:47   #5
shrek1993
Пользователь
 
Регистрация: 24.10.2010
Сообщений: 67
По умолчанию

В вожу я через fstream сортирую через FILE
Если я нарушил какие-либо правила прошу простить и сообщить...
shrek1993 вне форума Ответить с цитированием
Старый 15.04.2012, 17:54   #6
shrek1993
Пользователь
 
Регистрация: 24.10.2010
Сообщений: 67
По умолчанию

EUGY
я вас понимаю но не до конца понял правильно ли написана эта часть
Код:
do{f=0; 
		rewind(in);
		fread(&st1,sizeof(biblioteka),1,in);
	    while (!feof(in))
		 {fread(&st2,sizeof(biblioteka),1,in);
	      if (strcmp(st1.aftor,st2.aftor)>0)
		     {fseek(in,(-2)*sizeof(biblioteka),1);
		      fwrite(&st2,sizeof(biblioteka),1,in); 
		      fwrite(&st1,sizeof(biblioteka),1,in);
			  f=1;
		     }
	      fseek(in,(-1)*sizeof(biblioteka),1);
		  fread(&st1,sizeof(biblioteka),1,in);
		  }
	 }while(f!=0);
так как не нашёл правильной литературы и шаманил в слепую и не знаю операторы правильно ли написаны
Сори но с пользоваться пошаговой отладкой я пользоватся не научился он в глубь по операторам уходит не знаю чё делать
Если я нарушил какие-либо правила прошу простить и сообщить...
shrek1993 вне форума Ответить с цитированием
Старый 15.04.2012, 17:58   #7
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Ну вот например в студии F11 заходит в "глубь" процедуры, а F10 шаг без захода.
И в окнах можно смотреть состояние переменных и структур на каждом шаге выполнения. Вникните в это, очень много вопросов отпадут сами собой.
EUGY вне форума Ответить с цитированием
Старый 16.04.2012, 00:58   #8
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

сортируй массив структур)) и пиши в файл потом.

сортировать прямо в файле - это верх ... не знаю быдлокода или вообще чего))
onewho вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найди ошибку surf135 Помощь студентам 1 08.06.2010 13:05
Игра "Найди пару" ЕвгенияКошелек Помощь студентам 1 26.04.2010 23:07
Игра на С++, "найди невидимку" dontfantazy Помощь студентам 0 25.04.2010 21:28
Найди отличия ... или нужна помощь: C++ -> Delphi Karp_13 Помощь студентам 7 10.11.2009 12:07