Zanima me kako koristit fscanf (primjeri)
zelio bi napravit neku bazu podataka ili nesto slicno da iscitaje iz .txta pa ako ko zna :DD
Zanima me kako koristit fscanf (primjeri)
zelio bi napravit neku bazu podataka ili nesto slicno da iscitaje iz .txta pa ako ko zna :DD
ja bi da pravi nesto kao databazu...npr. da upisuje textove u redove odvojene novim redom ili nesto tako ...
ja bi da pravi nesto kao databazu...npr. da upisuje textove u redove odvojene novim redom ili nesto tako ...
Opet nisi napisao sto konkretno bi ti. Izlozi konkretni problem pa cemo vidjeti. Opcenite primjere mozes bez problema izguglati - dao sam ti link.
znam da si dao link (ruganje hahaa)
..ma treba mi nesto da iscitava razlicite stringove iz razlicitih linija txta...tj. ocu da trazi nesto dok ne nade rezultat...
Mogao si taj link shvatiti kao ruganje, ali si mogao taj link shvatiti i na pozitivan nacin, jer preko njega zaista dolazis do stranica s primjerima vezanim uz fscanf (primjerima koji ti iscitavaju svasta iz datoteka). Jesi uopce pogledao na koje stranice te vodi?
A ovo sto sad radis je vec preslo u dosadjivanje, da ne kazem i trolanje. Dvaput sam te pitao sto konkretno hoces napraviti - i dvaput ti odgovaras "nesto". Zar ne razumijes rijec "konkretno"? To znaci da navedes KAKVE tocno stringove imas u datoteci ili sto vec imas u datoteci, mozda jos najbolje da das primjer sadrzaja datoteke i kazes treba mi taj i taj string ili nesto takvo. A ne ovakvim besmislenim generickim "treba mi nesto".
Vise te neci pitati sto konkretno hoces, nego cu ili zatvoriti ili obrisati ovu temu, a tebe pocastiti kartonom zbog spamanja. Pa ti onda za*ebavaj ljude ili se uci normalnoj ljudskoj komunikaciji na nekom drugom forumu Mislim, helou, neka digne ruku onaj tko zna sto znaci "trazi nesto dok ne nade rezultat"! Daj se nauci izrazavati.
evo program koji sam napravio prije vec duze vremena ali je najbolji primjer ...
program je bankomat koji pamti sve korisnike ali ih spreman u polja...pa umjesto toga treba mi zapisivanje u file...databaza svih korisnika..te kasnije iscitavanje iz filea...evo pogledaj kod pa ces sve shvatit
#include <iostream>
#include <string>
#include <time.h>
using namespace std;
int main(){
//Potrebne stvari//
int x=0, n=0, pin[255], stanje[255], t;
string ulaz[3], imena[255], prezimena[255];
//Dobrodosli//
srand(time(NULL));
cout<<"Dobrodosli na Bankomat";
start:
//Provjera ima li racun//
cout<<"\nImate li racun na banki?: ";
cin>>ulaz[0];
//Pohranjivanje podataka novih korisnika//
if (ulaz[0]=="ne"){
//Ime i Prezime//
cout<<"Vase Ime: ";
cin>>imena[n];
cout<<"Vase Prezime: ";
cin>>prezimena[n];
//Stanje na Racunu//
cout<<"Stanje na racunu: ";
cin>>stanje[n];
//Ispis Random Pina//
cout<<"Vas Pin je: ";
pin[n]=(rand()%9000)+1000;
cout<<pin[n];
cout<<"\n";
//Mjesto za iduceg korisnika//
n++;
//Kraj Pohrane Korisnika//
}
//Nadogradivanje racuna novih korisnika//
if (ulaz[0]=="da"){
//Provjera Imena i Prezimena//
cout<<"Vase Ime: ";
cin>>ulaz[0];
cout<<"Vase Prezime: ";
cin>>ulaz[2];
x=0;
for (x=0; x<n; x++){
if (ulaz[0]==imena[x] && ulaz[2]==prezimena[x]){
cout<<"Korisnicko ime uredu.\n";
ulaz[1]="uredu";
break;
}
else {
if (x==n-1){
cout<<"Korisnicko ime krivo.\n";
ulaz[1]="krivo";
}
}
}
//Provjera Pina//
if (ulaz[1]=="uredu"){
cout<<"Unesite pin: ";
cin>>t;
if (t==pin[x]){
cout<<"Pin uredu\n";
cout<<"Stanje Racuna: ";
cout<<stanje[x];
cout<<"\n";
//Rad sa novcom//
cout<<"Zelite li nadoplatiti/dignuti/nista: ";
cin>>ulaz[2];
//Nadoplacivanje racuna//
if (ulaz[2]=="nadoplatiti"){
cout<<"Unesite iznos: ";
cin>>t;
stanje[x]+=t;
cout<<"Stanje Racuna: ";
cout<<stanje[x];
cout<<"\n";
}
//Dizanje para sa racuna//
if (ulaz[2]=="dignuti"){
cout<<"Unesite iznos: ";
cin>>t;
stanje[x]-=t;
cout<<"Stanje Racuna: ";
cout<<stanje[x];
cout<<"\n";
}
}
else {cout<<"Krivi Pin!\n";}
}
//Natrag na pocetak//
}
goto start;
return 0;
}
Prvo - nemoj koristiti izraz "databaza" za nesto sto nije "databaza", odnosno baza podataka. Baza podataka je puno vise od puke datoteke s popisom klijenata. Sadrzaj takve datoteke se u okviru baze podataka eventualno moze smatrati tablicom unutar baze podataka. Ako te zanima sto je baza podataka, pogledaj na Wikipediji ili potrazi na Googleu.
Drugo - zasto ne koristis polje strukture ili klase koja ce sadrzavati podatkovne clanove pin, stanje, ime, prezime, umjesto da bezveze imas cetiri polja?! Ovo sto si ti napravio se jednostavno NE radi.
Trece - NIGDJE u programu nisi napravio zapisivanje sadrzaja u datoteku! U fora ti je u tome da - kako zapisujes, tako i citas. Ako hoces koristiti fscanf za citanje iz datoteke, onda PRVO moras koristiti fprintf za zapisivanje sadrzaja u datoteku i proslijediti im iste formate kao argument). Ti bi citao iz datoteke, a uopce nemas datoteku! Ne kuzim zapravo sto te je mucilo - pa na jednom od onih linkova, konkretno ovom, imas jasan primjer za fscanf i fprintf - jasno se iz primjera vidi da u jednom prolazu u datoteku zapisuje jedan decimalni broj i jedno polje od 80 znakova pomocu funkcije fprintf, a nakon toga funkcijom fscanf cita prvo decimalni broj, a potom polje znakova. Ne mozes to primijeniti na svoj primjer?
Cetvrto - vezano uz drugo - zasto se uopce opterecujes funkcijama fprintf i fscanf? Imaj lijepo polje struktura i mozes jednu po jednu strukturu (ili pak citavo polje!) citati/zapisati u datoteku pomocu ifstream i ofstream objekata u binarnom nacinu. Primjer imas ovdje, drugi blok s kodom - za jednu strukturu, no dalje se koriste i templateovi koji omogucavaju univerzalno zapisivanje i citanje. Ako hoces ostati na ovom jednostavnom drugom bloku, onda mozes zapisivati strukturu po strukturu, medjutim tada moras datoteku otvoriti s "prekidacem" za dodavanje (append), znaci nesto tipa:
std::ofstream out(file_name.c_str(), std::ios::app);
Ima u svemu tome i jos jedna prednost. Kad spremas i ucitavas citave strukture u/iz datoteke, onda ne trebas u memoriji drzati podatke (vidim imas tu polje od 255 korisnika - sto ako ce ti trebai za 256 korisnika?). Znaci, uopce ne moras imati polja, nego nakon sto korisnik upise podatke, odmah ih dodajes na kraj datoteke. Slicno je kod citanja - mozes citati strukturu po strukturu, ali zapravo mozes direktno skociti na bilo koju strukturu unutar datoteke (recimo 24. korisnik) i procitati samo nju.
Kao što sam rekao ovo je napravljeno prije 3 mjeseca :S i naravno nema filea ni nicega ...
znaci ako koristim fprintf() i prinatm u nove redove npr:
\n
\n
korisnik1
\n
\n
korisnik2
pa za fscanf bi islo za korisnika 1: fscanf(txt, "\n\n%s"....)
fscanf za korisnika 2: fscanf(txt, "\n\n\n\n\n%s"....) ???
nemogu sad citat ostalo moram ispravljat ocjene sutra :O
pogledat cu nakon srijede kad je zadnje odgovaranje ^^
fscanf za korisnika 2: fscanf(txt, "\n\n\n\n\n%s"....) ???
Nemam bas nekog iskustva s (f)printf/scanf funkcijama tako da ti ne mogu reci. Zasto sam ne probas?
Ako datoteke ne trebaju biti tekstualne, onda ti je jednostavnije koristiti i/ofstream i zapisivati cijele strukture u datoteku.
A sva ona polja integera i stringova bi svakako morao zamijeniti jednim poljem struktura.
Ja bi taj program malo drukčije napisao, odnosno da provjeru vrši jedino preko pin-a
U jednu datoteku bi strpao pinove u string niz, a index stringa bi iskoristio za pristup bloku podataka u datoteci racuni
Ako baš hoćeš C sintaksu, i tu možeš raditi sa blokovima podataka i binarnom datotekom, međutim onda ne koristiš fprintf i fscanf,
nego fread i fwrite i fseek da dohvatiš indeks bloka
Međutim, bolje je raditi sa C++ kodom kako je mbaksa napisao, ali ako ti je to jednostavnije (a mnogima jest),
http://www.cplusplus.com/reference/clibrary/cstdio/fwrite/
pogledaj malo naredbe fwrite, fread, fseek, ftell i rewind
Mogu ti dati primjer, ali samo onaj dio koji sam ja napisao, ostali kod nije moj, pa ga neću staviti, ali skužit ćeš,
ovako se preko funkcije dodaje član u videoteku:
struct zapis{
char ime[25];
char prezime[25];
char filmovi[10][50];
int broj;
}temp;
void dodaj(char* dat, struct zapis temp) {
int i;
FILE* f;
char c;
do {
f = fopen(dat, "a+b");
if(f==0) {
perror("Greska - datoteka se ne moze otvoriti");
return;
}
printf("\nIme: "); scanf("%s", temp.ime);
printf("\nPrezime: "); scanf("%s", temp.prezime);
printf("\nBroj posudjenih filmova: "); scanf("%d", &temp.broj);
for(i=1; i<=temp.broj; i++) {
printf("%d. film: ", i);
scanf("%s", temp.filmovi[i-1]);
}
fwrite(&temp, sizeof(temp), 1, f);
fclose(f);
printf("Zelite li nastaviti? <Y/N>: ");
cin>> c;
}while(c=='Y' || c=='y');
}
Dakle, zapisuješ podatke u blokovima u binarnu datoteku.