D
dime
Суть задачи. Дана программа рабочая на забивание массива и на вывод инфы из него. А теперь программу надо переписать через Union. Подскажите как будет все выглядить?
Вот код:
########################################################
Также вот содержимое файла kniga.txt
77
iamdimoniamfromrussiaendyouarenotdimonyouarenotrussianwearerussiansbutiamdimon
23
0
1
3
8
9
11
15
21
24
27
30
33
38
41
44
47
54
56
59
67
70
71
73
78
7
0
3
7
8
12
16
19
23
2
0
3
5
Вот код:
Код:
#include "stdafx.h"
#include <conio.h>
char str[100];
char*** glava[100];
char** stroka[100];
int num, gln, stn, sln;
char* slovo[100];
void vivodd(void*** par, int rec){
void** st;
void** ed;
char* tmpp;
st=*par;
ed=*(par+1);
switch (rec){
case 5: {printf("\nGLAVA"); break;}
case 4: {printf("\n"); break;}
case 3: {printf(" "); break;}}
while(st<ed){
if (rec==3){
tmpp=(char*)st;
printf("%c", *tmpp);
tmpp++;
st=(void**)tmpp;
}
else
{
vivodd((void***)st, rec-1 );
st++;
}
}
}
void zagruzka(){
FILE* in=fopen("kniga.txt","r");
int i, t;
fscanf(in, "%d", &num);
fscanf(in, "%s", str);
fscanf(in, "%d", &sln);
for (i=0; i<=sln; i++){
fscanf(in, "%d", &t);
slovo[i]=str+t;
}
fscanf(in, "%d", &stn);
for (i=0; i<=stn; i++){
fscanf(in, "%d", &t);
stroka[i]=slovo+t;
}
fscanf(in, "%d", &gln);
for (i=0; i<=gln; i++){
fscanf(in, "%d", &t);
glava[i]=stroka+t;
}
glava[gln+1]=stroka+stn+1;
stroka[stn+1]=slovo+sln+1;
slovo[sln+1]=str+num+1;
fclose(in);
}
int input(){
int met;
printf("Vvedi chto vivesti:1)kniga\n");
printf(" 2)glava\n");
printf(" 3)stroka\n");
printf(" 4)slovo\n");
scanf("%d", &met);
return met;
}
void vivod(int n){
int a, b, c, i;
switch(n){
case 1:{ for (i=0; i<=gln; i++)
vivodd((void***)(glava+i), 5);
break;}
case 2:{
printf("Vvedite nomer glavi:");
scanf("%d", &a);
vivodd((void***)(glava+a), 5);
break;
}
case 3:{
printf("Vvedite nomer glavi i stroki:");
scanf("%d%d", &a, &b);
vivodd((void***)(glava[a]+b ), 4);
break;}
case 4:{
printf("Vvedite nomer glavi, stroki i slova");
scanf("%d%d%d", &a, &b, &c);
vivodd((void***)(glava[a][b]+c), 3);
break;}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int met;
printf("Hello. Press any key to continue. Press esc to quit \n");
zagruzka();
while(getch()!=27){
met=input();
vivod(met);
}
return 0;
}
########################################################
Также вот содержимое файла kniga.txt
77
iamdimoniamfromrussiaendyouarenotdimonyouarenotrussianwearerussiansbutiamdimon
23
0
1
3
8
9
11
15
21
24
27
30
33
38
41
44
47
54
56
59
67
70
71
73
78
7
0
3
7
8
12
16
19
23
2
0
3
5