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

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

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

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

04.06.2009, 19:03. Просмотров 579. Ответов 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++ Builder
Здравствуйте, уважаемые форумчане. У меня назрел еще один вопрос: -Есть задание написать приложение, которое осуществляет...

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

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

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

Вывод результата теста - JavaScript
Здравствуйте, уважаемые форумчане. Помогите, пожалуйста, подправить тест. В данном варианте результат теста выводится с помощью alert....

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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;
}
Ksy
2 / 2 / 0
Регистрация: 16.05.2009
Сообщений: 103
05.06.2009, 14:53  [ТС] #9
Сладких снов! Спасибо большое!!!

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

Добавлено через 15 часов 15 минут 34 секунды
Всё, теперь работает, КЛАССНО!!!!!!!!!!!!!!!!!!!
Что бы я без Вас дела? !!!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2009, 14:53
Привет! Вот еще темы с ответами:

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

Вывод результата прохождения теста - JavaScript
Здравствуйте ! Не получается вывести правильный результат. Нужно: до -10 &quot;Тест не проведен&quot;, 10-15 &quot;Все отлично&quot;, 15-30 &quot;Нормально&quot;,...

Подсчет и вывод результатов теста - MS Access
Доброго времени суток. Ситуация такая: Имеется таблица Тест, в ней 9 столбцов - КодПациента, Дата и 7 Ответов на вопросы. Варианты...

Вывод процента результата теста - Lazarus
Здравствуйте. Нужна небольшая помощь. Требуется вывести процент от количества правильных ответов. Количество вопросов (now), количество...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.06.2009, 14:53
Ответ Создать тему
Опции темы

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