e to je sad to. hvala puno!
još sam samo ubacio da ukloni kosu crtu / iz imena i tu stavi razmak. to je to. hvala još jednom
e to je sad to. hvala puno!
još sam samo ubacio da ukloni kosu crtu / iz imena i tu stavi razmak. to je to. hvala još jednom
Može i bolje:
*strstr(comet[i].name, " ") = '\0';
ah, ono rješenje je već implementirano, tako da...
hvala svejedno
Probaj ovo:
char* uredi_ime (char *name, int duljina)
{
int i, n=duljina;
char *new_name;
for (i=0; i<duljina-1; i++)
if (name[i]==' ' && name[i+1]==' ')
{ n=i; break; }
new_name = (char*) malloc (n*sizeof(char));
for (i=0; i<n; i++)
new_name[i]=name[i];
new_name[n]='\0';
free(name);
return new_name;
}
poziv:
comet[i].name = uredi_ime (comet[i].name, strlen(comet[i].name));
Zasto ne bi strlen koristio unutar funkcije uredi_ime i postedio se dodatnog argumenta kod pozivanja funkcije?
char* uredi_ime (char *name)
{
int i, n;
char *new_name;
n=strlen(name);
for (i=0; i<duljina-1; i++)
if (name[i]==' ' && name[i+1]==' ')
{ n=i; break; }
new_name = (char*) malloc (n*sizeof(char));
for (i=0; i<n; i++)
new_name[i]=name[i];
new_name[n]='\0';
free(name);
return new_name;
}
Onda možemo i ovako (verzija bez alokacije memorije) :
void uredi_ime (char *name) {
int i;
for (i=0; name[i+1]!='\0'; i++)
if (name[i]==' ' && name[i+1]==' ')
{ name[i]='\0'; break; }
}
uz poziv:
uredi_ime (comet[i].name);
Ako se nekom da mozgati (i usput meni pomoći):
Napišite program u kojem treba kreirati binarnu datoteku i pripremiti je za pisanje.
Deklarirajte također strukturu jednog zapisa kojeg sačinjavaju jedan cijeli broj i
znakovno polje od 15+1 elemenata.
Zatim učitajte broj N koji ne smije biti manji od 4 niti veći od 30.
N puta računajte slijedeće:
- Generirajte slučajni cijeli broj M iz intervala [8, 15].
- Generirajte M znakova, koji smiju biti znamenke ili slova, i uvrstite ih u polje.
- Preostale elemente polja postavite na nulu (ne znamenku '0', već broj 0).
- Upišite u binarnu datoteku zapis navedene strukture.
- Sve to isto ispisujte na zaslonu monitora.
Nakon toga zatvorite datoteku.
Na kraju izvršenja programa (na primjer, za N = 4) ispis na monitoru treba izgledati kao
na primjeru:
13 QPHoVzWu9Me7W
12 j18dQRDbuRo5
15 Yq37DL6yzXxQvxM
8 MfgIXEPX
Napišite funkciju koja će otvoriti datoteku iz prvog zadatka. Nakon toga treba učitati
sve podatke iz datoteke, na isti način kako su prethodno u njoj zapisani.
Ispisivati na zaslon sve zapise (na isti način kao u prvom zadatku), i prebrojavati
koliko je znamenki pročitano. Na kraju u funkciji zatvoriti datoteku i vratiti broj
znamenki. Funkciju dodati u program iz prvog zadatka, pozvati na kraju glavne
funkcije i ispisati traženi broj.
Zna li itko? Zeza me pohrana strukture u datoteku.
Zna li itko? Zeza me pohrana strukture u datoteku.
Lagano, problem je samo bio generirati brojeve, mala i velika slova zato sto izmedu njih ima jos ostalih znakova pa bi to iziskivalo puno testiranja i generiranja novih brojeva dok ne bi bili u vazecim intervalima. Pa sam malo potrazio na netu i vidio da je netko tom problemu doskocio lookup tabelama, (to ti je ovo polje alfanumerici) sto je IMO super ideja. Ostatak je rutina, fwriteom u datoteku bacas strukturu po strukturu, pri cemu fwriteu saljes pokazivac na strukturu i velicinu strukture. Pri citanju je slican proces. Fread vraca broj uspjesno procitanih elemenata, i samo citas strukture s diska dok ti fread ne vrati nulu (znaci da je naletio na kraj datoteke). Na kraju pomnozis broj uspjesno procitanih struktura sa velicinom strukture i dobijes koliko je znakova procitano iz datoteke:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
struct struktura
{
int broj;
char polje[16];
};
int procitaj()
{
FILE *fh;
struct struktura moja_struktura;
int broj_procitanih=0;
fh=fopen("data.dat", "rb");
printf("\n");
while (fread(&moja_struktura, sizeof(struct struktura), 1, fh)!=0)
{
printf("%d %s\n", moja_struktura.broj, moja_struktura.polje);
broj_procitanih++;
}
fclose(fh);
return broj_procitanih*sizeof(struct struktura);
}
int main()
{
struct struktura moja_struktura;
int N, n, i;
FILE *fh;
const char alfanumerici[63]= "0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
srand(time(NULL));
fh=fopen("data.dat", "wb");
N=(rand()%27)+4;
N=3;
for (n=1; n<=N; n++)
{
for (i=0; i<16; i++)
moja_struktura.polje[i]=0;
moja_struktura.broj=(rand()%8)+8;
for (i=0; i<moja_struktura.broj; i++)
moja_struktura.polje[i]=alfanumerici[rand()%62];
printf("%d %s\n", moja_struktura.broj, moja_struktura.polje);
fwrite(&moja_struktura, sizeof(struct struktura), 1, fh);
}
fclose(fh);
printf("\nBroj procitanih znakova: %d\n", procitaj());
system("pause");
return 0;
}
Ja sam skrpao ovo,ali još uvijek ne radi kako spada:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct strukt{
int M;
char znakovi[16];
};
int main()
{
int N;
int i;
int a;
srand((unsigned)time(NULL));
struct strukt struktura;
FILE *fB;
do{
printf ("\n Unesite broj izmedu 4 i 30. \n\n");
scanf (" %d",&N);
if (N<4 || N>30) printf ("\n Unijeli ste pogresan broj. \n\n");
}while(N<4 || N>30);
fB=fopen("datoteka.dat", "wb");
const char alfanumerici[63]= "0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
for(i=0;i<N;i++){
struktura.M=((rand()%8)+8);
printf("\n%d ", struktura.M);
fprintf(fB,"\n%d ", struktura.M);
for(a=0;a<struktura.M;a++) {
struktura.znakovi[a]=alfanumerici[rand()%62];
printf("%c", struktura.znakovi[a]);
fprintf(fB,"%c", struktura.znakovi[a]);
}
printf("\n");
free(struktura.znakovi);
}
int otvori();
fclose(fB);
printf("\n");
printf("\nUkupno je ucitano %d brojeva.\n\n", otvori());
system("PAUSE");
return 0;
}
int otvori()
{
FILE *fB;
struct strukt struktura;
int procitano_brojeva=0;
fB=fopen("datoteka.dat", "rb");
printf("\n");
while (fread(&struktura, sizeof(struct strukt), 1, fB)!=0){
printf("%d %s\n", struktura.M, struktura.znakovi);
procitano_brojeva++;
}
fclose(fB);
return procitano_brojeva*sizeof(struct strukt);
}
UPOMOĆ!!!!
Uspio sam to riješiti na ovaj način:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
struct struktura
{
int broj;
char polje[16];
};
int main()
{
struct struktura moja_struktura;
int N, n, i;
FILE *fh;
const char alfanumerici[63]= "0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
srand(time(NULL));
fh=fopen("data.dat", "wb");
N=(rand()%27)+4;
N=3;
for (n=1; n<=N; n++)
{
for (i=0; i<16; i++)
moja_struktura.polje[i]=0;
moja_struktura.broj=(rand()%8)+8;
for (i=0; i<moja_struktura.broj; i++)
moja_struktura.polje[i]=alfanumerici[rand()%62];
printf("%d %s\n", moja_struktura.broj, moja_struktura.polje);
fwrite(&moja_struktura, sizeof(struct struktura), 1, fh);
}
fclose(fh);
printf("\nBroj procitanih znakova: %d\n", procitaj());
system("pause");
return 0;
}
int procitaj()
{
FILE *fh;
struct struktura moja_struktura;
int broj_procitanih=0;
fh=fopen("data.dat", "rb");
printf("\n");
while (fread(&moja_struktura, sizeof(struct struktura), 1, fh)!=0)
{
printf("%d %s\n", moja_struktura.broj, moja_struktura.polje);
broj_procitanih++;
}
fclose(fh);
return broj_procitanih*sizeof(struct struktura);
}
Jel' znas sto si fulao? Tj. koja je razlika izmedu fwrite i fprintf? Koliko vas u skoli/faksu uce o tome kako se 32 bitni broj pohranjuje u memoriju, ili sto je zapravo C string?
jel ovo dobro? to je sa tvz foruma, samo sam ga ja malo izmjenio
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
struct zapis {
int m;
char str[15+1];
} zapis;
int prebroji(int n, char* dat);
int main() {
int n, i, j;
char pom, dat[20+1];
FILE *f;
srand((unsigned)NULL);
printf("Unesite zeljeno ime datoteke: ");
scanf("%s", dat);
f = fopen(dat, "wb");
unos: printf ("\nUnesite N (izmedu 3 i 31): ");
scanf ("%d", &n);
if (n < 4 || n > 30){
printf ("\nPogresan unos!\n");
goto unos;
}
printf ("\n");
for (i=0; i<n; i++) {
zapis.m = rand()%8 + 8;
printf ("%2d ", zapis.m);
for (j=0; j<zapis.m; j++) {
pom = rand()%255 + 1;
if (isalnum(pom)) {
zapis.str[j] = pom;
printf ("%c ", zapis.str[j]);
}
else
j--;
}
printf ("\n");
fwrite (&zapis, sizeof(zapis), 1, f);
}
fclose(f);
printf ("\nUkupno slova: %d", prebroji(n, dat));
return 0;
}
int prebroji(int n, char* dat) {
int i, j, br=0;
FILE *f;
f = fopen(dat, "rb");
if (f == NULL) {
printf ("\nGreska pri otvaranju datoteke!\n\n");
exit(1);
}
for (i=0; i<n; i++) {
fread(&zapis, sizeof(zapis), 1, f);
for (j=0; j<zapis.m; j++) {
if (isalpha(zapis.str[j]))
br++;
}
}
fclose(f);
return br;
}
jel ovo dobro? to je sa tvz foruma, samo sam ga ja malo izmjenio
Izgleda OK, samo imam primjedbu na onaj goto, moze se to i bez njega, a i ovo testiranje nasumicnog broja funkcijom isalnum() nije bas ucinkovito iako ce obaviti posao. Gornji kôd poziva rand() dok mu rand ne vrati prihvatljivi broj. Isto tako, struktura zapis je deklarirana kao globalna varijabla, izbjegavaj koristenje globalnih varijabli.
Ova petlja koja ti stvara nasumicna slova i brojeve u polju bi bolje bila ovako napravljena:
for (j=0; j<zapis.m; j++) {
pom=0;
while (!isalnum(pom))
pom = rand()%123;
zapis.str[j] = pom;
printf ("%c ", zapis.str[j]);
}
Može li mi netko reći što ne valja sa ovim programom8još ga nisam dovršio):
#include <stdio.h>
#include <stdlib.h>
int main()
{
int N,i;
struct struktura{
int zatvorski;
char imeiprezime[50];
int duljina;
float odsluzeno;
char karakteristika[6];
}strukt;
FILE *fh;
do{
printf("\n Unesite broj od 3 do 15\n\n");
scanf("%d",&N);
fflush(stdin);
if(N<3 || N>15) printf("\n Unijeli ste pogresan broj!\n\n");
}while(N<3 || N>15);
fh=fopen("cuza.dat","wb");
for(i=0;i<N;i++){
printf("\n Unesite broj zatvorenika.\n\n");
fscanf(fh,"%d",&strukt.zatvorski);
fflush(stdin);
printf("\n Unesite ime i prezime zatvorenika.\n\n");
fgets(strukt.imeiprezime,50,fh);
fflush(stdin);
printf("\n Unesite duljinu kazne zatvorenika.\n\n");
fscanf(fh,"%d",&strukt.duljina);
fflush(stdin);
printf("\n Unesite odsluzeni dio kazne zatvorenika.\n\n");
fscanf(fh,"%f",&strukt.odsluzeno);
fflush(stdin);
printf("\n Unesite karakteristiku ponasanja zatvorenika.\n\n");
fgets(strukt.karakteristika,6,fh);
fflush(stdin);
}
fclose(fh);
system("PAUSE");
return 0;
}
Zadatak je na slici:
Prvo - zašto ti je struktura unutar maina? Struktura je jedan tvoj tip podatka, i kao takvog je bolje stavljati ga prije maina.
Drugo - karakteristika je običan int tekst zadatka kaže 0 ili 1.
Treće i najvažnije - ti ćeš spremit samo jednog zatvorenika. Nigdje nemaš alokaciju memorije za njih N, niti ih spremaš u to polje.
Četvrto - otvorio si datoteku za pisanje koliko vidim, a ne čitanje ( "r" )
i mislim da ti ne treba fflush stalno
Prvo - zašto ti je struktura unutar maina? Struktura je jedan tvoj tip podatka, i kao takvog je bolje stavljati ga prije maina.
Drugo - karakteristika je običan int tekst zadatka kaže 0 ili 1.
Treće i najvažnije - ti ćeš spremit samo jednog zatvorenika. Nigdje nemaš alokaciju memorije za njih N, niti ih spremaš u to polje.
Četvrto - otvorio si datoteku za pisanje koliko vidim, a ne čitanje ( "r" )
i mislim da ti ne treba fflush stalno
1. Dobro. Stavit ću je ispred maina.
2. Ja sam baš želio ovako. Znam da je sa 0 i 1 lakše, ali da se izvježbam.
3. Da napravim polje struktura ili nešto drugo?
4.???
Prvo - zašto ti je struktura unutar maina? Struktura je jedan tvoj tip podatka, i kao takvog je bolje stavljati ga prije maina.
Samo bih htio ovo malo vise pojasniti. Naime ako se definira struktura unutar neke funkcije ona vrijedi samo za tu funkciju. Kada se definira izvan, postaje globalna te se moze koristiti u svim podfunkcijama u toj source datoteci.
Sve je to ok, ali ovaj bi program (iako nedovršen) trebao raditi. Da bi mogao čitati iz datoteke, najprije treba zapisati. A neće.
Sve je to ok, ali ovaj bi program (iako nedovršen) trebao raditi. Da bi mogao čitati iz datoteke, najprije treba zapisati. A neće.
Ne zapisuje zato sto ti ni ne koristis funkcije koje zapisuju!
Ne vidim da igdje koristis jednu od ovih funkcija: fwrite, fputs, fputc, fprintf
Ovdje ti je referenca standardne C biblioteke. Prouci si to, da vidis opis svake finkcije, koje argumente trebas koristiti kod poziva, te imas i primjere za svaku funkciju.
Prvo - zašto ti je struktura unutar maina? Struktura je jedan tvoj tip podatka, i kao takvog je bolje stavljati ga prije maina.
Drugo - karakteristika je običan int tekst zadatka kaže 0 ili 1.
Treće i najvažnije - ti ćeš spremit samo jednog zatvorenika. Nigdje nemaš alokaciju memorije za njih N, niti ih spremaš u to polje.
Četvrto - otvorio si datoteku za pisanje koliko vidim, a ne čitanje ( "r" )
i mislim da ti ne treba fflush stalno
1. Dobro. Stavit ću je ispred maina.
2. Ja sam baš želio ovako. Znam da je sa 0 i 1 lakše, ali da se izvježbam.
3. Da napravim polje struktura ili nešto drugo?
4.???
1. Kao što je već objašnjeno, uobičajeno je staviti ispred jer tako tu strukturu cijeli program vidi (računajući i sve tvoje funkcije itd)
2. Ok kad želiš tako :D
3. Da, tu će ti trebat polje struktura koje alociraš sa malloc koliko treba, a kako imaš gornju ogradu možeš kod deklaracije rezervirati tu memoriju. Kod učitavanja onda učitavaš zatvorenik[i].ime itd
4. Koliko vidim datoteka ti nije otvorena za čitanje iz nje (nisi otvorio sa argumentom "r" ). Možda i sa ovim argumentom ide učitavanje, iako mi više izgleda da će biti za upisivanje.
Drugo - karakteristika je običan int tekst zadatka kaže 0 ili 1.
2. Ja sam baš želio ovako. Znam da je sa 0 i 1 lakše, ali da se izvježbam.
2. Ok kad želiš tako :D
To niti meni nije jasno, zasto zeli spremati vrijednost koja je u biti BOOL koji fino stane u int (i jos ostane mjesta :D) u polje od 6 znakova?
Moze cak i izbjeci koristenje polja, jer mu, realno, nije niti potrebno. Dovoljna je jedna instanca stukture ciju vrijednost nakon svake iteracije petlje spremi na disk, te mu pri citanju trebaju tocno 2 instance te strukture za trazenje najpogodnijeg kandidata za "predsjednicko pomilovanje".
jel ovo dobro? men se cini da jest
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct {
int zatbr;
char imeprez[50+1];
int duljina;
float odsluzeno;
char karakt;
} zapis;
void unos_podataka ();
void ispis_podataka ();
int main () {
int a;
printf( "Unos podataka....1\n"
"Ispis podataka...2\n"
"Izlaz............3\n\n");
do {
scanf("%d", &a);
if (a == 1)
unos_podataka();
else if (a == 2)
ispis_podataka();
else if (a == 0)
printf("Kraj programa");
fflush(stdin);
} while (a<1 || a>3);
getch();
return 0;
}
void unos_podataka() {
int i, n;
FILE *f;
srand((unsigned)time(NULL));
f = fopen ("cuza.dat", "wb");
n = 2; /*ovdje zapravo ide rand()%13+3, ali je 2 zbog brzeg testiranja programa*/
printf("Unose se podaci za %d zatvorenika. \n", n);
for (i=1; i<=n; i++) {
printf("\n%d. zatvorenik: \n", i);
do {
printf("Unesi zatvorski broj: ");
scanf("%d", &zapis.zatbr);
fflush(stdin);
} while (zapis.zatbr<1000 || zapis.zatbr>9999);
printf("Ime i prezime: ");
gets(zapis.imeprez);
fflush(stdin);
printf("Duljina kazne: ");
scanf("%d", &zapis.duljina);
fflush(stdin);
printf("Odsluzeno kazne: ");
scanf("%f", &zapis.odsluzeno);
fflush(stdin);
printf("Karakteristiku (dobar=0, los=1): ");
scanf("%d", &zapis.karakt);
fflush(stdin);
fwrite (&zapis, sizeof (zapis), 1, f);
}
fclose (f);
}
void ispis_podataka(){
FILE *f;
f = fopen ("cuza.dat", "rb");
while (fread(&zapis, sizeof(zapis), 1, f)) {
if ((zapis.odsluzeno / zapis.duljina >= 0.5) && (zapis.karakt == 0))
printf("\nZatvorenik koji ima pravo na pomilovanje: %s", zapis.imeprez);
}
fclose (f);
}
U svakom slucaju bolje od onoga sto sam ja imao na umu, iako bi i moje radilo... :P
jel ovo dobro? men se cini da jest
Stvarno dobro. Grgec bi bio ponosan. Doduše, nije po mom ukusu-ja više volim što je moguće kraće i jednostavnije programe.
jel ovo dobro? men se cini da jest
Stvarno dobro. Grgec bi bio ponosan. Doduše, nije po mom ukusu-ja više volim što je moguće kraće i jednostavnije programe.
evo onda i kraća verzija. jednostavnije ne može :D nema onog izbornika na početku, nego se odmah upisuju podaci, i nakon što se završi upisivanje odmah izbaci tko ima pravo na pomilovanje
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct {
int zatbr;
char imeprez[50+1];
int duljina;
float odsluzeno;
char karakt;
} zapis;
int main () {
int i, n;
FILE *f1, *f2;
srand((unsigned)time(NULL));
f1 = fopen ("cuza.dat", "wb");
n = 2; /*ovdje zapravo ide rand()%13+3, ali je 2 zbog brzeg testiranja programa*/
printf("Unose se podaci za %d zatvorenika. \n", n);
for (i=1; i<=n; i++) {
printf("\n%d. zatvorenik: \n", i);
do {
printf("Unesi zatvorski broj: ");
scanf("%d", &zapis.zatbr);
fflush(stdin);
} while (zapis.zatbr<1000 || zapis.zatbr>9999);
printf("Ime i prezime: ");
gets(zapis.imeprez);
fflush(stdin);
printf("Duljina kazne: ");
scanf("%d", &zapis.duljina);
fflush(stdin);
printf("Odsluzeno kazne: ");
scanf("%f", &zapis.odsluzeno);
fflush(stdin);
printf("Karakteristika (dobar=0, los=1): ");
scanf("%d", &zapis.karakt);
fflush(stdin);
fwrite (&zapis, sizeof (zapis), 1, f1);
}
fclose (f1);
f2 = fopen ("cuza.dat", "rb");
while (fread(&zapis, sizeof(zapis), 1, f2)) {
if ((zapis.odsluzeno / zapis.duljina >= 0.5) && (zapis.karakt == 0))
printf ("\nZatvorenik koji ima pravo na pomilovanje: %s", zapis.imeprez);
}
fclose (f2);
getch();
return 0;
}
evo onda i kraća verzija. jednostavnije ne može :D nema onog izbornika na početku, nego se odmah upisuju podaci, i nakon što se završi upisivanje odmah izbaci tko ima pravo na pomilovanje
E to te ja pitam. Šta ti programiraš u 1:25 ujutro?!
E to te ja pitam. Šta ti programiraš u 1:25 ujutro?!
hehehe, ma ionak sam bio za laptopom do 3 ujutro. a to nije bio nikakav problem. samo sam naredbe iz one dvije funkcije prebacio u main i malo uredio i to je to
E to te ja pitam. Šta ti programiraš u 1:25 ujutro?!
Hehe, ja sam programiro nešto za diplomski na Badnjak, moji se svi razbježali nekud pa sam Božić dočeko uz compiler :D
A po noći uvijek dođu najbolje ideje :D
Ja sam ovo napravio, ali opet ne radi:
#include <stdio.h>
#include <stdlib.h>
struct struktura{
int zatvorski;
char imeiprezime[50];
int duljina;
float odsluzeno;
char karakteristika[6];
}zatvorenik;
int N;
int main()
{
int i;
struct zatvorenik;
FILE *fh;
do{
printf("\n Unesite broj od 3 do 15\n\n");
scanf("%d",&N);
fflush(stdin);
if(N<3 || N>15) printf("\n Unijeli ste pogresan broj!\n\n");
}while(N<3 || N>15);
fh=fopen("cuza.dat","wb");
for(i=0;i<N;i++){
do{
printf("\n Unesite broj zatvorenika.\n\n");
scanf("%d",&zatvorenik.zatvorski);
fflush(stdin);
}while(zatvorenik.zatvorski<1000 || zatvorenik.zatvorski>9999);
fprintf(fh,"\n%d\n",zatvorenik.zatvorski);
printf("\n Unesite ime i prezime zatvorenika.\n\n");
gets(zatvorenik.imeiprezime);
fflush(stdin);
fputs(zatvorenik.imeiprezime,fh);
printf("\n Unesite duljinu kazne zatvorenika.\n\n");
scanf("%d",&zatvorenik.duljina);
fflush(stdin);
fprintf(fh,"\n%d\n",zatvorenik.duljina);
printf("\n Unesite odsluzeni dio kazne zatvorenika.\n\n");
scanf("%f",zatvorenik.odsluzeno);
fflush(stdin);
fprintf(fh,"\n%f\n",zatvorenik.odsluzeno);
printf("\n Unesite karakteristiku ponasanja zatvorenika.\n\n");
gats(zatvorenik.karakteristika);
fflush(stdin);
fputs(zatvorenik.karakteristika,fh);
}
fclose(fh);
int otvori();
system("PAUSE");
return 0;
}
int otvori()
{
FILE *fp;
int i;
struct zatvorenik;
fp=fopen("cuza.dat","rb");
for(i=0;i<N;i++){
fscanf(fp,"%d",zatvorenik.zatvorski);
fgets(zatvorenik.imeiprezime,50,fp);
fscanf(fp,"%d",zatvorenik.duljina);
fscanf(fp,"%f",zatvorenik.odsluzeno);
fgets(zatvorenik.karakteristika,6,fp);
if(zatvorenik.karakteristika=='dobro' && (zatvorenik.duljina/zatvorenik.odsluzeno<2)){printf("\n\n Zatvorenik %s ima pravo na pomilovanje. \n\n",zatvorenik.imeiprezime);}
}
fclose(fp);
system("PAUSE");
return 0;
}
Kaže da je zatvorenik undeclared.
EDIT: popravio. Sada me zeza u funkciji otvori, kaže da nisu kompatibilni tipovi.
Evo još jedan neuspjeli program:
#include <stdio.h>
#include <stdlib.h>
int N;
char *rec;
char *rec2;
rec=((int*)malloc(N*sizeof(char)));
rec2=((int*)malloc(N*sizeof(char)));
int main()
{
int k;
char pom[100];
gets(pom);
N=strlen(pom);
rec=pom;
int prepravi();
for(k=0;k<N;k++){
printf("\n\n%s\n\n",rec2);
}
system("PAUSE");
return 0;
}
int prepravi()
{
int i,j=0;
i=N;
for(i;i>0;i--){
rec2[j]=rec[i];
j++;
}
return 0;
}
Trebo bi uzeti string i ispisati ga obrnuto, tj. da prvi znak bude zadnji.
Evo još jedan neuspjeli program:
#include <stdio.h>
#include <stdlib.h>
int N;
char *rec;
char *rec2;
rec=((int*)malloc(N*sizeof(char)));
rec2=((int*)malloc(N*sizeof(char)));
int main()
{
int k;
char pom[100];
gets(pom);
N=strlen(pom);
rec=pom;
int prepravi();
for(k=0;k<N;k++){
printf("\n\n%s\n\n",rec2);
}
system("PAUSE");
return 0;
}
int prepravi()
{
int i,j=0;
i=N;
for(i;i>0;i--){
rec2[j]=rec[i];
j++;
}
return 0;
}
Trebo bi uzeti string i ispisati ga obrnuto, tj. da prvi znak bude zadnji.
Imas ti tu poprilicno gresaka, i poprilicno viska koda.
1. Ako si stavia da ti je maksimalna velicina pom-a 100 onda ti taj "string" moze bit dug maksimalno 100 znakova znaci ovo igranje sa memorijom je bezpotrebno jer znas da je velicina 100 pa ga tako mozes odma i alocirat
2. Ako bas zelis stedit na resursima onda je jednostavnije koristit samo jedan char, manje alociranja memorije a broj kopiranja je gotovo isti
npr: ako polje izglda ovako (pisen slova odvojena razmakon da je lakse)
a s d f g h j
onda uzmes novi char u kojeg spremis "a" zatim prekopiras "j "na misto "a" i prekopiras taj char koji ima a na misto di je "j"
3. AKo je cilj programa samo ispisat nesto obrnutim redom onda je najlakse samo ispisivat obrnutim redom a ne preokretat pa ispisivat normalnim redom, znaci umisto da okreces pa ides for petljon
//TODO unos
//TODO pretvori u obrnuti redosljed
for(i=0; i<krajstring; i++)
{
//TODO ispis
}
napises samo
//TODO unos
for(i=krajstring; i>0; --i)
{
printf(polje(i));
}
Ovo je ukratko probaj ispravit ako neuspije pitaj