Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
soadpol
0 / 0 / 0
Регистрация: 19.09.2009
Сообщений: 16
#1

помощь(консультация) в написании прогр.на Си-текст.редактор - C++

19.09.2009, 04:12. Просмотров 1059. Ответов 1
Метки нет (Все метки)

Тут вот задали написать текстовой редактор на си,выдана программа-заготовка,она по идее якобы
тот же текст.ред.но урезанный,в общем беру эту прогу,пытаюсь компилировать,но -куча ошибок(чего
в принципе быть не должно), начинаю смотреть вид ошибок,понимаю что не подключены нек.библиотеки #include,кое-что узнаю,вношу,но остается все таки еще-

c:14: предупреждение: инициализация из несовместимого типа указателя .c:14: ошибка: элемент инциализатора является не константа .c:14: предупреждение: определение данных не имеет тип или класс памяти Выполнение завершено
вот текст проги-

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
/*Задание: Просмотр текстовых файлов с использованием стрелок и*/
/*         клавиш Page Up,Page Down,Home,End*/
/*---------------------w_edit.c------------------*/
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
#include <conio.h>
#include <dos.h>
char *rs[100];
far*p=(char far *)MK_FP(0xB800,0x0000) ;/*строка 14,здесь ошибка*/
int main(int argc,char *argv[])
{void wr_text(int xt,int yt,int xk,int yk);
 void pr_koor(int xt,int yt,int xk,int yk);
 FILE *f1;
 int i,j,c,yk,xk,xt,yt,kstr;
 if(argc!=2)
   {printf("неверные параметры"); getch();goto mret;}
   
/*Выделение памяти под указатели*/
 for(i=0;i<=100;i++)
  if((rs[i]=malloc(100))==NULL)
   {printf("Недостаточно памяти");goto mret;}
 if ((f1=fopen(argv[1],"r"))==NULL)
  {printf("Файл %s не открывается",argv[1]); goto mret;}
 for(i=0;i<=100;i++)
   for(j=0;j<=100;j++)
      *(rs[i]+j)=' ';
      
/*Формирование файла в памяти;*/
 i=0;
 while(fgets(rs[i++],100,f1)!=NULL)
  if(i==100) break;
 kstr=i-2;
 printf("kstr=%d",i);
 c=getch();
 
 gotoxy(1,1);
 
/*Вывод sr на экран*/
 xt=0;yt=0;
 for(i=yt;i<=22;i++)
   for(j=xt;j<=79;j++)
    { if((*(rs[i]+j)==' ')|(*(rs[i]+j)=='\0')|(*(rs[i]+j)=='\n'))
       putchar(' ');
     else
       putchar(*(rs[i]+j));
    }
 xk=1;yk=1;
 pr_koor(xt,yt,xk,yk);
 gotoxy(1,1);
 while(1 )
 {
  c=getch();
  if(c=='\0') c=getch();
  yk=wherey();xk=wherex();
   switch(c)
     {
      case 72:{if( yk>1)/*Стрелка вверх*/
                {yk--;gotoxy(xk,yk);
                pr_koor(xt,yt,xk,yk);
                }
               else
                if(yt>0)
                 {yt--;wr_text(xt,yt,xk,yk);
                 }
               break;
              }
      case 119:{            /*Ctrl-Home*/
                 yt=0;xt=0;yk=1;xk=1;
                 wr_text(xt,yt,xk,yk);
                 break;
               }
      case 117:{            /*Ctrl-End*/
                 yt=kstr-21;
                 if(yt<0) yt=0;yk=kstr-yt+2;xk=1;
                 wr_text(xt,yt,xk,yk);
                 break;
               }
      case 80:{if( yk<=22)          /*Стрелка вниз*/
                {yk++;gotoxy(xk,yk);
                pr_koor(xt,yt,xk,yk);
                }
               else
                if(yt<77)
                 {yt++;wr_text(xt,yt,xk,yk);
                 }
              break;
              }
 
       case 75:{if( xk>1)        /*Стрелка влево*/
                {xk--;gotoxy(xk,yk);
                 pr_koor(xt,yt,xk,yk);
                }
               else
                if(xt>0)
                 {xt--;wr_text(xt,yt,xk,yk);
                 }
 
               break;
              }
       case 77:{if( xk<80)        /*Стрелка вправо*/
                {
                 xk++;gotoxy(xk,yk);
                 pr_koor(xt,yt,xk,yk);
                }
                else
                 if(xt<20)
                  {
                   xt++;wr_text(xt,yt,xk,yk);
                  }
                break;
               }
      case 73:{if( yt>22)       /*Page Up*/
                {yt-=23;wr_text(xt,yt,xk,yk);
                }
               else
                if(yt>0)
                 {yt=0;wr_text(xt,yt,xk,yk);
                 }
                else
                {yk=1;gotoxy(xk,yk);
                pr_koor(xt,yt,xk,yk);
                }
               break;
              }
      case 81:{if( yt<=55)       /*Page Down*/
                {yt+=23;wr_text(xt,yt,xk,yk);
                }
               else
                if(yt<77)
                 {yt=77;wr_text(xt,yt,xk,yk);
                 }
                else
                {yk=23;gotoxy(xk,yk);
                pr_koor(xt,yt,xk,yk);
                }
               break;
              }
      case 71:{ xt=0;xk=1;       /*Home*/
                wr_text(xt,yt,xk,yk);
                break;
              }
      case 79:{                /*End*/
               for(j=99;j>0;j--)
                {if(!((*(rs[yt+yk-1]+j)==' ')|(*(rs[yt+yk-1]+j)=='\0')|
                   (*(rs[yt+yk-1]+j)=='\n')))
                  break;
                }
               j++; /*Позиция за последним символом строки в файле памяти*/
               if(j<=xt+79)
                {xk=j-xt+1;gotoxy(xk,yk);pr_koor(xt,yt,xk,yk);}
               break;
              }
      case 27: goto mret;
/*      case 0..255:{rs[xt+xk]+[yt+yk]
      for (i=100,i>xt+xk-1,i--)
         {rs[i]+[yt+yk]:=rs[i-1]+[yt+yk];}
          rs[xt+xk]+[yt+yk]:=c;}*/
 
 
     }
  }
 mret:;
}
void wr_text(int xt,int yt,int xk,int yk)
{
 int i,j;
 
 gotoxy(1,1);
 for(i=0;i<=22;i++)
  for(j=0;j<=79;j++)
       { if((*(rs[i+yt]+j+xt)==' ')|(*(rs[i+yt]+j+xt)=='\0')|
       (*(rs[i+yt]+j+xt)=='\n'))
       *(p+i*160+j*2)=' ';
     else
       *(p+i*160+j*2)=*(rs[i+yt]+j+xt);
    }
 gotoxy(35,25);
 printf("line %2d,pos %2d (xk=%2d,yk=%2d,xt=%2d,yt=%2d)",yk+yt,xk+xt,xk,yk,xt,yt);
 gotoxy(xk,yk);
}
хотелось бы узнать что означает far*p=(char far *)MK_FP(0xB800,0x0000)
это что-то вроде резервирует память?какая нужна #include
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2009, 04:12     помощь(консультация) в написании прогр.на Си-текст.редактор
Посмотрите здесь:

Visual C++ Немогу никак разобраться в массивах, срочно нужна помощь в написании консольных программ
Помогите в написании программы (C++) C++
Текстовый редактор. Зашифровать текст. C++
Сложности в написании кодов C++
C++ консультация
C++ Builder нужна помощь в написании программки
Помощь в написании программы, производящей вычисления и заносящей их в табличку C++
Реализация разбиения числа с Динам. Прогр C++
C++ В чем опасность Double-Checked Locking (параллельное прогр-е)
C++ Не работает прогр. Ошибки!
Правильность в написании формулы C++
C++ WinAPI Однострочный редактор текста Edit не редактирует текст. И несколько вопр-сов от начинающего по CreateWindowEx

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2910 / 1238 / 78
Регистрация: 27.05.2008
Сообщений: 3,321
19.09.2009, 13:40     помощь(консультация) в написании прогр.на Си-текст.редактор #2
Какой компилятор?
Вот это: far*p=(char far *)MK_FP(0xB800,0x0000) ;/*строка 14,здесь ошибка*/ было актуально в давным-давно ушедшую эпоху MS DOS, мир праху ее.... Так конструировался указатель на экранный буфер.
Боюсь, что этот исходник подлежит сдаче в музей на почетное хранение. Даже если ты его скомпилируешь, при выполнении наверняка вылезет ошибка типа "Программа выполнила недопустимую операцию и будет закрыта."

Попытайся, тем не менее, извлечь из него пользу:
1. попытайся понять, как он работает, не забывая, что тут, видимо, реалии MS DOS,
2. поняв, перепиши все для твоего компилятора.
Yandex
Объявления
19.09.2009, 13:40     помощь(консультация) в написании прогр.на Си-текст.редактор
Ответ Создать тему
Опции темы

Текущее время: 07:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru