Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Вот давеча читал книгу Герберта Шильдта... 26.10.01 16:16
Автор: Смайлик Статус: Незарегистрированный пользователь
|
И попытался выложить в Borland С++ следующего рода мозаику из книжки,
а оно мне выдает, что программа выполнила недопустимую операцию.
Так вот, многоуважаемый All, уваж начинающего, подскажи в чем проблеммка и вообще как поприятнее оформить эти функции в C++.
Ато ведь, у меня завтра может быть аппендикс вырезать будут, и не узнаю я, что не так и помру молодым, глупым)))...
/*
Копирование символов из экрана в буфер
*/
#include <stdio.h>
#include <dos.h>
//Прототипы
void save_video(int,int,int,int, int);
void goto_xy(int, int);
main()
{
int startx=1, starty=0, endx=5, endy=2;
int buffer[4000]=0;
int *buff_ptr;
buff_ptr=&buffer[4000];
save_video(startx, starty, endx, endy, buff_ptr);
return 0;
}
//Функции
void goto_xy(int enx1, int eny1)
{
union REGS r;
r.h.ah=2;
r.h.dl=enx1;
r.h.dh=eny1;
r.h.bh=0;
int86(0X10,&r,&r);
}
void save_video(int stx,int sty,int enx,int eny, int* buffer)
{
union REGS r;
for (int j=sty;j<=eny;j++)
for(int i=stx;i<=enx;i++)
{
goto_xy(i,j);
r.h.ah=8;
r.h.bh=0;
buffer++=int86(0X10,&r,&r);
putchar('*');
}
}
|
|
[C++] Шилдт оно конечно дело хорошее, но для изучения изыка не подходит 26.10.01 18:06
Автор: :-) <:-)> Статус: Elderman Отредактировано 26.10.01 18:30 Количество правок: 1
|
Если ты не можешь прогу даже скомпилировать (4синтаксическихошибки тут будет как минимум), то тебе надо учить C, а не читать Шилдта :-)
> /* > Копирование символов из экрана в буфер > */ > > #include <stdio.h> > #include <dos.h> > > //Прототипы > > void save_video(int,int,int,int, int); void save_video(int,int,int,int, int*);
> void goto_xy(int, int); > > > main() > { > int startx=1, starty=0, endx=5, endy=2; > int buffer[4000]=0; int buffer[4000];
> int *buff_ptr; > buff_ptr=&buffer[4000]; эти 2 строчки выкинуть
> save_video(startx, starty, endx, endy, buff_ptr); save_video(startx, starty, endx, endy, buffer);
> return 0; > } > > > //Функции > > void goto_xy(int enx1, int eny1) > > { > union REGS r; > > r.h.ah=2; > r.h.dl=enx1; > r.h.dh=eny1; > r.h.bh=0; > int86(0X10,&r,&r); > } > > > void save_video(int stx,int sty,int enx,int eny, int* > buffer) > { > union REGS r; > for (int j=sty;j<=eny;j++) > for(int i=stx;i<=enx;i++) > { > goto_xy(i,j); > r.h.ah=8; > r.h.bh=0; > buffer++=int86(0X10,&r,&r); *buffer++=int86(0X10,&r,&r);
> putchar('*'); > } > }
|
| |
[C++] Шилдт оно конечно дело хорошее, но для изучения изыка не подходит 26.10.01 19:19
Автор: Смайлик Статус: Незарегистрированный пользователь
|
Уж и незнаю - она все равно ошибку выдает...
>Шилдт оно конечно дело хорошее, но для изучения изыка не подходит
Я понимаю, и стараюсь читать другие книжки, но Шильдт уж очень
интересно все излогает. А кроме того хочется всамделошную менюшку
из псевдографики)))...
>Если ты не можешь прогу даже скомпилировать (4синтаксическихошибки)
Их (ошибок) было и одна, и восемь и три. А компилятор так тот вообще
умочка ни тебе предупреждений, ни синтетических ошибок, прямо золотко а не
компилятор. Хотя плохому танцору конечно)))...
Просто когда пишешь и у тебя что-то не получается, невольно начинаешь
перебирать различные вариации, а при отсутствии опыта (случается и такое),
постепенно перестаешь понимать что правильно, а что не очень.
Итак окончательный вариант, как я понял:
/*
Копирование экрана в буфер
*/
#include <stdio.h>
#include <dos.h>
//Прототипы
void save_video(int,int,int,int,int*);
void goto_xy(int, int);
main()
{
int startx=1, starty=0, endx=5, endy=2;
int buffer[4000];
save_video(startx, starty, endx, endy, buffer);
return 0;
}
//Функции
void goto_xy(int enx1, int eny1)
{union REGS r;
r.h.ah=2;
r.h.dl=enx1;
r.h.dh=eny1;
r.h.bh=0;
int86(0X10,&r,&r);
}
void save_video(int stx,int sty,int enx,int eny, int* buffer)
{
union REGS r;
for (int j=sty;j<=eny;j++)
for(int i=stx;i<=enx;i++)
{
goto_xy(i,j);
r.h.ah=8;
r.h.bh=0;
*buffer++=int86(0X10,&r,&r);
putchar('*');
}
}
Может кто скажет компилится ли этот код у него на компьютере.
PS: Самое обидное, что первую строчку строчку он у меня нормально
отрабатывает ***, а вот при переходе на вторую
"Программой предпринята попытка исполнить недопустимую операцию
место ошибки 0720:0788"
|
|
[C++] учи матчасть :))) 26.10.01 16:38
Автор: XR <eXtremal Research> Статус: The Elderman
|
> main() > { > int startx=1, starty=0, endx=5, endy=2; > int buffer[4000]=0; > int *buff_ptr; > buff_ptr=&buffer[4000];
Ну ка подумай - куда сей указатель смотрит
[skip]
> > void save_video(int stx,int sty,int enx,int eny, int* > buffer) > { > union REGS r; > for (int j=sty;j<=eny;j++) > for(int i=stx;i<=enx;i++) > { > goto_xy(i,j); > r.h.ah=8; > r.h.bh=0; > buffer++=int86(0X10,&r,&r); .... тоже прикольный код :))))
> putchar('*'); > } > }
|
| |
[C++] Млин, чувствую судьба умереть глупым, а как не хочится, тыб знал(((... 26.10.01 17:49
Автор: Смайлик Статус: Незарегистрированный пользователь
|
Чтож делать то?...
Ничего не придумывается, кроме как:
buff_ptr=&buffer[4000];
На ячейку памяти первого элемента массива buffer... помоему так...
>.... тоже прикольный код :))))
Так лучше?
void save_video(int stx,int sty,int enx,int eny, int* buff)
{
union REGS r;
for (int j=sty;j<=eny;j++)
for(int i=stx;i<=enx;i++)
{
goto_xy(i,j);
r.h.ah=8;
r.h.bh=0;
*buff=int86(0X10,&r,&r);
buff++;
putchar('*');
}
}
Только ошибочка никуда не исчезла, обидно(((...
Мне когданибуть (надеюсь) будет стыдно за подобное клянчание, но может найдутся еще сердобольные люди...
|
| | |
[C++] Млин, чувствую судьба умереть глупым, а как не хочится, тыб знал(((... 26.10.01 18:44
Автор: XR <eXtremal Research> Статус: The Elderman Отредактировано 26.10.01 18:57 Количество правок: 1
|
> Чтож делать то?... > > Ничего не придумывается, кроме как: > 1)
> buff_ptr=&buffer[4000]; > > На ячейку памяти первого элемента массива buffer... помоему > так...
А если ПОДУМАТЬ ? :)))
> > >.... тоже прикольный код :)))) > > Так лучше? > 2)
> *buff=int86(0X10,&r,&r); > buff++;
Те же @@ токо сбоку :)))
> Только ошибочка никуда не исчезла, обидно(((... > Мне когданибуть (надеюсь) будет стыдно за подобное > клянчание, но может найдутся еще сердобольные люди...
3) Из за мелкого шрифта в моей мазилле я пенку с прототипом int а потом передачей туда указателя пропустил
- спасибо ':-)'
|
| | | |
[c++] ура заработала!!!... 26.10.01 19:33
Автор: Смайлик Статус: Незарегистрированный пользователь
|
УРА ЗАРАБОТАЛА!!!...
Я думал, думал, я все понял...
Чувствую, что уже стал умней на пару сантиметров...
Пойду еще съем несквика)))...
всем спасибо, особенно за матчасть, только мне ее учить
не пришлось, пришлось пимпочку с эмулятора на none
переставить, вот...
> buff_ptr=&buffer[4000]; >А если ПОДУМАТЬ ? :)))
Я уже и так думал, и этак, но в функцию массив почемуто не любят
передавать, и изначально у меня в этом смысле все было как у людей,
а потом, начал извращатся и так и этак. Хотя все еще считаю, что:
> buff_ptr=&buffer[4000]; > На ячейку памяти первого элемента массива buffer... Может кто обяснит в чем я не прав?...
>> *buff=int86(0X10,&r,&r);
>> buff++;
>Те же @@ токо сбоку :)))
А тут честно и откровенно признаюсь - не пойму в чем трабл(((...
>3) Из за мелкого шрифта в моей мазилле я пенку с прототипом int а
Хнык, хнык, ну яж исправился!!!...
|
|
|