Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
2 / 2 / 1
Регистрация: 16.05.2009
Сообщений: 103
1

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

04.06.2009, 19:03. Просмотров 701. Ответов 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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2009, 19:03
Ответы с готовыми решениями:

Создание программы-теста(оценивание знаний) и вывод теста в форму, с подсчетом оценки(балл за правильный ответ)
Здравствуйте, уважаемые форумчане. У меня назрел еще один вопрос: -Есть задание написать...

Макроопределения на очистку экрана, установку курсора в центре экрана, вывод теста на экран
добрый вечер, может кто помочь с Макроопределениями на очистку экрана, установку курсора в центре...

Вывод массива по частям
Друзья подскажите как можно из массива с начала выбрать первые 5 значений, а потом остальные.

Вывод строки по частям
Привет есть программа на асемблере которая выводит введеную строку в обратном порядке мне нужно...

8
2341 / 497 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
04.06.2009, 19:29 2
описание не очень внятно...
надо чтобы если файл содержит больше строк, чем экран, выдавать те, что влазят, и по нажатию любой клавиши - еще серию на весь экран?
это вообще называется постраничный вывод.
или я понял задачу не так?
0
2 / 2 / 1
Регистрация: 16.05.2009
Сообщений: 103
04.06.2009, 19:37  [ТС] 3
Да, именно так, как мне и надо!!!
0
2341 / 497 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
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;
}
0
2 / 2 / 1
Регистрация: 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();
}
Синий-функция, что и выводит на экран содержимое
0
2341 / 497 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
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;
}
0
2 / 2 / 1
Регистрация: 16.05.2009
Сообщений: 103
04.06.2009, 22:35  [ТС] 7
n-идёт нумерация строчек, в которых count-количество пробелов

Добавлено через 3 минуты 0 секунд
А вы пытались запустить мою странную програмку?
0
2341 / 497 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
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;
}
1
2 / 2 / 1
Регистрация: 16.05.2009
Сообщений: 103
05.06.2009, 14:53  [ТС] 9
Сладких снов! Спасибо большое!!!

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

Добавлено через 15 часов 15 минут 34 секунды
Всё, теперь работает, КЛАССНО!!!!!!!!!!!!!!!!!!!
Что бы я без Вас дела? !!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2009, 14:53

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вывод резултатов теста(вывод оценки)
Добрый день всем программистам! Мне нужна ваша помощь. Я Делаю сайт с онлайн тестированием. Мне...

Не могу понять как делать вывод на экран структуры STUDENT на заполнение и вывод данных на экран
Добрый вечер. Вот задание и мой код программы на C++ Не выходит нормально реализовать 3е...

Вывод результатов теста
Есть тест, по прохождении появляется сообщение с количеством правильных ответов и оценкой....

Постраничный вывод теста
Есть тест. Он прекрасна работает. Но есть одно но. Вопросы выводятся списком. Понадобилось эти же...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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