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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Ksy
2 / 2 / 0
Регистрация: 16.05.2009
Сообщений: 103
#1

Вывод теста на экран по частям - C++

04.06.2009, 19:03. Просмотров 574. Ответов 8
Метки нет (Все метки)

У меня есть функция, которая выводит содержимое файла на экран. И мне нужно создать функцию, что бы я могла большой текст файла просматривать по частям с помощью нажатия любой клавиши.
Вот функция, которая выводит на экран текст:
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
int txt2()
{
    char s[800];
    int i, count,n=0;
    FILE *fin, *fout,*f;
 
       fin = fopen(str1, "r");
     {
    fout = fopen("output.txt", "w");
    while(fgets(s, sizeof(s), fin) != NULL) {
       for(i = count = 0; s[i] != '\n' && s[i] != EOF; i++)
        if(s[i] == ' ')
        count++;
        n++;
    gotoxy(5,n+5);
    printf("%s", s);
    fprintf(fout, "\n%d = %d",n, count);
      }
    fclose(fin);
    fclose(fout);
 
    getch();
      }
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2009, 19:03     Вывод теста на экран по частям
Посмотрите здесь:

Объясните код по частям - C++
Добрый день. Не могу понять следующие выражения. Опишите пожалуйста каждую буковку и слово. Реальные названия заменил на вымышленные...

Вывод на экран - C++
После второго отсортированного массива на экран ничего не выводит Хотя в файл всё записывает Как исправить ?

Как считывать большую строку по частям? - C++
Как считывать большую строку по частям?

Вывод дерева на экран - C++
Создаю бинарное дерево, заполняю его случайными числами. Хотелось бы все это дело аккуратно вывести на экран:) А также подсчитать сумму...

Вывод дерева на экран - C++
#include <iostream> using std::cout; using std::endl; template<typename T> class avltree { public: struct node...

вывод из файла на экран - C++
Добрый вечер! Что-то я никак не пойму. Нужно вывести числа из файла на экран по пять числа в строке. И никак не могу понять как это...

Вывод картинки на экран - C++
Как вывести на екран картинку размером 1024х786х36?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
04.06.2009, 19:29     Вывод теста на экран по частям #2
описание не очень внятно...
надо чтобы если файл содержит больше строк, чем экран, выдавать те, что влазят, и по нажатию любой клавиши - еще серию на весь экран?
это вообще называется постраничный вывод.
или я понял задачу не так?
Ksy
2 / 2 / 0
Регистрация: 16.05.2009
Сообщений: 103
04.06.2009, 19:37  [ТС]     Вывод теста на экран по частям #3
Да, именно так, как мне и надо!!!
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
04.06.2009, 20:34     Вывод теста на экран по частям #4
ты уверена, что она текст выводит?
у меня большие сомнения, что она может работать...
ниже пример, как сделать вывод на 8 строк за раз.
определяется константой PAGESIZE
при условии, конечно, что ваша программка действительно может работать.

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
#define PAGESIZE 8
 
int txt2()
{
char s[800];
int i, count,n=0;
FILE *fin, *fout,*f;
int cstr;
 
fin = fopen(str1, "r");
{
fout = fopen("output.txt", "w");
cstr = 0;// obnulaem schetchik strok
while(fgets(s, sizeof(s), fin) != NULL) {
for(i = count = 0; s[i] != '\n' && s[i] != EOF; i++)
if(s[i] == ' ')
count++;
n++;
if(cstr == PAGESIZE)
{
    getch();//gdem nagatiya klavishi
    cstr = 0;// obnulaem schetchik strok
};
gotoxy(5,n+5);
printf("%s", s);
fprintf(fout, "\n%d = %d",n, count);
}
fclose(fin);
fclose(fout);
getch();
}
return 0;
}
Ksy
2 / 2 / 0
Регистрация: 16.05.2009
Сообщений: 103
04.06.2009, 20:56  [ТС]     Вывод теста на экран по частям #5
В принципе, интересно получилось. Но какие то помарочки получились.

Просто у меня функция выводит содержимое на экран и высчитывает пробелы построчно. И получается, что содержимое файла оно мне само прокрутило сверху вниз, а после нажатия клавиши прокрутило результаты!!!

Можно я скину всю свою программу с интерфейсом, что бы иметь представление о чем я???

Добавлено через 8 минут 46 секунд
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
184
185
186
187
188
189
190
191
192
193
194
195
196
197
#define PAGESIZE 8
#include <graphics.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <iostream.h>
#include <MATH.H>
#include <STRING.H>
#include <FSTREAM.H>
char str1[255];
 
void vvood()
{
   char str2[255];
 
   memset(str1,'\0',sizeof(str1));
   gotoxy(24,17);
 
 printf("");
 strcat(str1, "");
 gets(str2);
 strcat(str1, str2);
   }
//***********************************************
int txt3()
{
    char h[800];
    int i1, count;
    FILE *f;
    gotoxy(1,1);
    setfillstyle(SOLID_FILL,0);
 
    bar(0,0,640,480);
    setfillstyle(SOLID_FILL,GREEN);
    rectangle(225,50,390,475);
    settextstyle(DEFAULT_FONT,HORIZ_DIR,3);
    outtextxy(240,20,"RESULT");
 
    f = fopen("output.txt", "r");
    for(i1 = 0;!feof(f); i1++)
      {
    fgets(h,100,f);
    gotoxy(35,i1+5);
    puts(h);
     }
    fclose(f);
    getch();
    return 0;
}
 
 
[COLOR=Blue]int txt2()
{
    char s[800];
    int i, count,n=0,cstr = 0;
    FILE *fin, *fout,*f;
 
    gotoxy(12,65);
    setfillstyle(SOLID_FILL,0);
 
    bar(0,0,640,480);
    setfillstyle(SOLID_FILL,GREEN);
    rectangle(5,50,635,475);
    settextstyle(DEFAULT_FONT,HORIZ_DIR,2);
    outtextxy(90,20,"Output of contents on screen");
 
     fin = fopen(str1, "r");
     if(fin==NULL){cleardevice();gotoxy(1,1);printf("Error!");getch();}
     else
     {
    fout = fopen("output.txt", "w");
    while(fgets(s, sizeof(s), fin) != NULL) {
       for(i = count = 0; s[i] != '\n' && s[i] != EOF; i++)
        if(s[i] == ' ')
        count++;
        n++;
if(cstr == PAGESIZE)
{
        getch();//gdem nagatiya klavishi
        cstr = 0;// obnulaem schetchik strok
};
 
    gotoxy(5,n+5);
    printf("%s", s);
    fprintf(fout, "\n%d = %d",n, count);
      }
    fclose(fin);
    fclose(fout);
 
    getch();
    txt3();
    }
    return 0;
}[/COLOR]
void Menu()
{
int x1=180,y1=350,x2=470,y2=290;
setfillstyle(SOLID_FILL,1);
bar(0,0,640,480);
 
setfillstyle(SOLID_FILL,15);
bar(x1,y1,x2,y2);
bar(x1,y1-200,x2,y2-200);
bar(x1,y1-100,x2,y2-100);
setcolor(RED);
settextstyle(DEFAULT_FONT,HORIZ_DIR,3);
outtextxy(275,310,"Exit");
outtextxy(273,210,"Help");
settextstyle(DEFAULT_FONT,HORIZ_DIR,2);
outtextxy(252,113,"Text file");
}
void kursor(int x1, int y1, int x2, int y2,int color)
{
 setcolor(color);
 setlinestyle(0,0,3);
 rectangle(x1,y1,x2,y2);
}
//***********************************************
int Zdvig_kursor()
{
int key,x1=180,y1=150,x2=470,y2=90,i=0;
 
 kursor(x1,y1,x2,y2,RED);
 while(key!=13)
  {
   kbhit();
   key=getch();
   kursor(x1,y1,x2,y2,15);
   switch(key)
    {
     case 72: if(i>0) {y1-=100;y2-=100;i--;}break;
     case 80: if(i<2) {y1+=100;y2+=100;i++;}break;
    }
   kursor(x1,y1,x2,y2,RED);
  }
return i;
}
//***********************************************
void txt()
{
setfillstyle(SOLID_FILL,WHITE);
bar(0,0,640,480);
 
setfillstyle(SOLID_FILL,2);
bar(158,215,474,290);
//setcolor(BLACK);
settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
outtextxy(200,229,"Enter address of the fail:");
 
setfillstyle(SOLID_FILL,BLACK);
bar(178,250,453,275);
 
vvood();
 
//getch();
}
//***********************************************
void Pomosh()
{
setfillstyle(SOLID_FILL,WHITE);
bar(0,0,640,480);
 
settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
 
rectangle(10,10,630,470);
setcolor(0);
outtextxy(30,25,"This program by means of menu 'Taxt fail' output contents of the file and ");
outtextxy(18,40,"count spaces line by line. You must input name of the file. ");
 
getch();
}
//***********************************************
void Put()
{
char  key;
int k;
while(k!=2)
{
 Menu();
 k=Zdvig_kursor();
 switch (k)
 {
  case  0 :txt();txt2();break;
  case  1 :Pomosh();break;
  case  2 :break;
 }
}
}
void main()
{
   float result;
   int gdriver = DETECT, gmode, errorcode;
   initgraph(&gdriver, &gmode, "D:\\BC\\BGI");
   Put();
   getch();
   closegraph();
}
Синий-функция, что и выводит на экран содержимое
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
04.06.2009, 21:46     Вывод теста на экран по частям #6
Да пожалуста.

Добавлено через 49 минут 45 секунд
Цитата Сообщение от Ksy Посмотреть сообщение
for(i = count = 0; s[i] != '\n' && s[i] != EOF; i++)
if(s[i] == ' ')
count++;
вот это - очень странная конструкция.
она сканит предложение и считает пробелы, как я понял.
организация в целом довольно нелепая(не обижайтесь, до индийцев вам далеко. ).
по-видимому, в такой конструкции в качестве счетчика строк проще использовать n.
только, зачем при этом нужен еще и count - вообще не понял. вроде общего счетчика строк?
кстати, желательно очищать рабочее место при обнулении n. но это уже на ваше усмотрение.

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
int txt2()
{
char s[800];
int i, count,n=0;
FILE *fin, *fout,*f;
 
gotoxy(12,65);
setfillstyle(SOLID_FILL,0);
 
bar(0,0,640,480);
setfillstyle(SOLID_FILL,GREEN);
rectangle(5,50,635,475);
settextstyle(DEFAULT_FONT,HORIZ_DIR,2);
outtextxy(90,20,"Output of contents on screen");
 
fin = fopen(str1, "r");
if(fin==NULL){cleardevice();gotoxy(1,1);printf("Er ror!");getch();}
else
{
fout = fopen("output.txt", "w");
while(fgets(s, sizeof(s), fin) != NULL) {
for(i = count = 0; s[i] != '\n' && s[i] != EOF; i++)
if(s[i] == ' ')
count++;
n++;
if(n == PAGESIZE)
{
getch();//gdem nagatiya klavishi
n = 0;// obnulaem schetchik strok
};
 
gotoxy(5,n+5);
printf("%s", s);
fprintf(fout, "\n%d = %d",n, count);
}
fclose(fin);
fclose(fout);
 
getch();
txt3();
}
return 0;
}
Ksy
2 / 2 / 0
Регистрация: 16.05.2009
Сообщений: 103
04.06.2009, 22:35  [ТС]     Вывод теста на экран по частям #7
n-идёт нумерация строчек, в которых count-количество пробелов

Добавлено через 3 минуты 0 секунд
А вы пытались запустить мою странную програмку?
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
04.06.2009, 22:43     Вывод теста на экран по частям #8
просто код организован странно.
ладно, нужно переделать этот кусок.
так должно все работать.
очистку рабочей области сами добавте, если надо.
а я спать пошел. у меня уже 3 доходит. соловьи поют... лепота!

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
int txt2()
{
char s[800];
int i, count,n=0,str=0;
FILE *fin, *fout,*f;
 
gotoxy(12,65);
setfillstyle(SOLID_FILL,0);
 
bar(0,0,640,480);
setfillstyle(SOLID_FILL,GREEN);
rectangle(5,50,635,475);
settextstyle(DEFAULT_FONT,HORIZ_DIR,2);
outtextxy(90,20,"Output of contents on screen");
 
fin = fopen(str1, "r");
if(fin==NULL){cleardevice();gotoxy(1,1);printf("Er ror!");getch();}
else
{
fout = fopen("output.txt", "w");
while(fgets(s, sizeof(s), fin) != NULL) {
for(i = count = 0; s[i] != '\n' && s[i] != EOF; i++)
if(s[i] == ' ')
count++;
n++;
str++;
if(str == PAGESIZE)
{
getch();//gdem nagatiya klavishi
str = 0;// obnulaem schetchik strok
};
 
gotoxy(5,str+5);
printf("%s", s);
fprintf(fout, "\n%d = %d",n, count);
}
fclose(fin);
fclose(fout);
 
getch();
txt3();
}
return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2009, 14:53     Вывод теста на экран по частям
Еще ссылки по теме:

Вывод значений на экран - C++
Имеется след код: #include &lt;conio.h&gt; using namespace std; int main() { struct Phone { int n_station; int...

Вывод матрицы на экран - C++
//* С клавиатуры вводится размерность целочисленной матрицы, затем сама матрица.Найти элементы меньшие среднего арифметического. //*...

Вывод на экран алфавита - C++
Помогите пожалуйста написать программу, в которой требуется вывести на экран все малые буквы латинского алфавита и их коды.

Вывод изображения на экран - C++
Здравствуйте! Пишу программу в консольном приложении Win32 на С++. Подскажите пожалуйста, как вывести изображение из файла формата bmp на...

Вывод мастей на экран - C++
Программа должна выводить колоду карт, перемешивать ее и выводить снова #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; ...


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

Или воспользуйтесь поиском по форуму:
Ksy
2 / 2 / 0
Регистрация: 16.05.2009
Сообщений: 103
05.06.2009, 14:53  [ТС]     Вывод теста на экран по частям #9
Сладких снов! Спасибо большое!!!

Добавлено через 26 минут 1 секунду
Так вы всё-таки не пробовали запускать мою программу?

Добавлено через 15 часов 15 минут 34 секунды
Всё, теперь работает, КЛАССНО!!!!!!!!!!!!!!!!!!!
Что бы я без Вас дела? !!!
Yandex
Объявления
05.06.2009, 14:53     Вывод теста на экран по частям
Ответ Создать тему
Опции темы

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