Takže dostal som sa sem:
(niečo je zakomentované)
Mám problém v tom, že neviem urobiť cyklus na vytvorenie ďalších prvkov.
Proste, 1. prvok vytvorím, ďalší by som tiež vedel, atď, ale potrebujem to ohraničiť, a to neviem ako.
Kód: Vybrať všetko
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_DLZKA 80 /* maximalna dlzka riadka */
/* pomocne premenne k diakritike */
char ss = 231, uu = 163, z = 167, l = 150, t = 156, ii = 161, aa = 160, ae = 132, yy = 236;
typedef struct riadok {
char riadok[MAX_DLZKA];
int aktualna_dlzka;
struct riadok *p_dalsi;
} RIADOK;
/* funkcia - dynamická alokácia prvku, ak je pamat alokovana, vrati sa struktura */
RIADOK *alokuj_a_testuj(void)
{
RIADOK *p_pom;
p_pom = (RIADOK *) malloc(sizeof(RIADOK));
if (p_pom == NULL) {
printf("Malo pamati\n");
exit(1);
}
return p_pom;
}
/*
void napln(RIADOK *p_riadok, char *obsah_riadku, int dlzka)
{
strcpy(p_riadok->riadok, obsah_riadku);
p_riadok->aktualna_dlzka = dlzka;
}
*/
int main(void)
{
int i, max_dlzka = 0;
RIADOK *p_prvy = NULL,
*p_aktualny,
*p_pomocny;
FILE *fr;
/* otvorenie suboru */
if ((fr = fopen("SUBOR.TXT", "r")) == NULL) {
printf("\nS%cbor sa ned%c otvori%c! \n", uu, aa, t);
return;
}
/* vytvorenie prveho prvku struktury */
p_prvy = alokuj_a_testuj();
if (fgets(p_prvy->riadok, MAX_DLZKA - 1, fr)) {
p_prvy->aktualna_dlzka = strlen(p_prvy->riadok) - 1;
p_aktualny = p_prvy;
//puts(p_aktualny->riadok);
}
p_prvy->p_dalsi = NULL;
p_aktualny = p_prvy;
puts(p_aktualny->riadok); /* napise cely retazec, aj '\n' */
printf("prvy = %d\n", p_aktualny->aktualna_dlzka);
/* vytvorenie vsetkych ostatnych prvkov */
do {
p_aktualny->p_dalsi = alokuj_a_testuj();
p_aktualny = p_aktualny->p_dalsi;
if (fgets(p_pomocny->riadok, MAX_DLZKA - 1, fr) != NULL) {
p_pomocny->aktualna_dlzka = strlen(p_pomocny->riadok);
//printf("%d\n", p_pomocny->aktualna_dlzka);
if (max_dlzka < p_pomocny->aktualna_dlzka) {
max_dlzka = p_pomocny->aktualna_dlzka;
//printf("%d\n", max_dlzka);
}
p_aktualny = p_pomocny;
puts(p_aktualny->riadok);
p_aktualny->p_dalsi = NULL;
}
} while (fgets(p_pomocny->riadok, MAX_DLZKA - 1, fr) == NULL);
/* zavretie suboru */
if (fclose(fr) == EOF)
printf("\nS%cbor sa ned%c zavrie%c! \n", uu, aa, t);
/*
for (p_aktualny = p_prvy; p_aktualny->p_dalsi != NULL; p_aktualny = p_aktualny->p_dalsi) {
printf("\n%d\n", pocet);
if (max_dlzka == p_aktualny->aktualna_dlzka)
puts(p_aktualny->riadok);
puts(p_aktualny->riadok);
putchar('\n');
pocet++;
}
*/
return 0;
}