Týden 11
Prebrali sme:
- práca s textovými súbormi, vstup a výstup
Príklady
- počet znakov z veľkej abecedy vo vstupnom súbore a ich zápis do výstupného súboru
int pocet=0;
FILE *fr = fopen("vstup.txt", "r");
if (fr==NULL) {printf("Subor vstup.txt sa nepodarilo otvorit\n"); exit(1);}
FILE *fw = fopen("vystup.txt", "w");
if (fw==NULL)
{
//zatvorime otvoreny subor fr
fclose(fr);
printf("Nepodarilo sa vytvorit/otvorit subor vystup.txt\n"); exit(1);
}
char c;
while ((c=getc(fr))!=EOF)
//nacitavame znak z fr kym nie je end-of-file
{
if (c>='A' && c<= 'Z')
{pocet++; putc(c, fw);}
}
fclose(fr); fclose(fw);
- počet slov v súbore pomocou funkcie int kolkoSlov(const char * retazec) z predošlého týždňa
int pocet;
FILE *f = fopen("vstup.txt", "r");
char* riadok = (char *) malloc(100*sizeof(char));
while((fgets(riadok, 100, f))!=NULL)
{
pocet+=kolkoSlov(riadok);
//spocitame slova v riadku
}
free(riadok);
fclose(f);
- priraďovanie a porovnávanie reťazcov
char* r1 = (char*) malloc(4*sizeof(char)); r1[0] = 'a'; r1[1] = 'b'; r1[2] = 'c'; r1[3]='\0';
char* r2 = "abc";
printf("ukazuju tie dva pointre na rovnake miesto v pamati?\n");
if (r1==r2)
printf("ano\n\n");
else printf("nie\n\n");
printf("su tie dva retazce obsahovo rovnake?\n");
if (strcmp(r1,r2)==0)
printf("ano\n\n");
else printf("nie\n\n");
- načítanie riadkov vstupného súboru, ich úprava pomocou funkcie char* trim(char* retazec), ktora odstrani nadbytocne biele znaky, a zapísanie upravených riadkov do výstupného súboru
FILE *fr = fopen("vstup.txt", "r");
FILE *fw = fopen("vystup.txt", "w");
char* riadok = (char *) malloc(100*sizeof(char));
while((fgets(riadok, 100, fr))!=NULL)
{
char* upravenyRiadok = trim(riadok);
fputs(upravenyRiadok, fw);
//zapis upraveneho riadku
free(upravenyRiadok);
}
free(riadok);
fclose(fr); fclose(fw);
- načítanie matice 9x9
FILE *f = fopen("vstup.txt", "r");
int matica[9][9];
for (int i=0; i<9; i++)
{
for (int j=0; j<9; j++)
fscanf(f, "%d", &(matica[i][j]))
; //funkcii scanf a fscanf nezalezi na medzerach alebo prazdnych riadkoch, maticu by spravne nacitalo aj kebyze zadate kazde cislo na novy riadok, aj kebyze mate 81 cisel v jednom riadku, aj ked ich budete mat pekne napisane v matici
}