Ograničavanje broja znakova u c++

poruka: 6
|
čitano: 2.903
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
neaktivan
offline
Ograničavanje broja znakova u c++

Zelio bih da ograničim broj unosa znakova kod unosa matičnog broja radnika na 13 znakova- brojeva

Je li to moguće, i ako je, kako?

Hvala unaprijed!

Evo i programa:

#include <iostream>
#include <fstream>
using namespace std;

//deklariranje sloga
struct tradnik{
int mat_br;
char ime_prez[35];
char spol;
int god_rodj;
};
//definiranje varijable radnik koja je tipa tradnik
tradnik radnik;

//funkcija unosa podataka u datoteku
void unos_podataka_u_datoteku(){
fstream dat;
char dalje;
dat.open("radnici.dat",ios::out | ios::binary);
do{
cout << "Maticni broj: ";
cin >> radnik.mat_br;
cout << "Ime i prezime: ";
cin.ignore();
cin.getline (radnik.ime_prez, sizeof(radnik.ime_prez));
cout << "Spol(m/z): ";
cin >> radnik.spol;
cout << "Godina rodjenja: ";
cin >> radnik.god_rodj;
dat.write((char *) &radnik,sizeof(radnik));
cout << "Zelite li unositi jos radnika? (d/n)";
cin >> dalje;
} while (dalje=='d');
dat.close();
};

//funkcija ispisa podataka o svim radnicima
void ispis_podataka_o_svim_radnicima(){
fstream dat;
dat.open("radnici.dat",ios::in | ios::binary);
while (1){
dat.read((char *) &radnik,sizeof(radnik));
if (dat.eof()) break;
cout << "Maticni broj: " << radnik.mat_br << endl;
cout << "Ime i prezime: " << radnik.ime_prez << endl;
cout << "Spol: " << radnik.spol << endl;
cout << "Godina rodjenja: " << radnik.god_rodj << endl;
}
dat.close();
};

//funkcija ispisa podataka o jednom radniku sa trazenim maticnim brojem
void ispis_podataka_o_zadanom_radniku(int mbr){
fstream dat;
int brojac=0;
dat.open("radnici.dat",ios::in | ios::binary);
while (1){
dat.read((char *) &radnik,sizeof(radnik));
if (dat.eof()) break;
if (radnik.mat_br==mbr){
cout << "Maticni broj: " << radnik.mat_br << endl;
cout << "Ime i prezime: " << radnik.ime_prez << endl;
cout << "Spol: " << radnik.spol << endl;
cout << "Godina rodjenja: " << radnik.god_rodj << endl;
brojac++;
}
}
if (brojac==0)
cout << "Radnik s maticnim brojem " << mbr << " nije nadjen u datoteci."<<endl;
dat.close();
};

//funkcija ispisa podataka o radnicima odredjenog spola
void ispis_podataka_po_spolu(char spol){
fstream dat;
int brojac=0;
dat.open("radnici.dat",ios::in | ios::binary);
while (1){
dat.read((char *) &radnik,sizeof(radnik));
if (dat.eof()) break;
if (radnik.spol==spol){
cout << "Maticni broj: " << radnik.mat_br << endl;
cout << "Ime i prezime: " << radnik.ime_prez << endl;
cout << "Spol: " << radnik.spol << endl;
cout << "Godina rodjenja: " << radnik.god_rodj << endl;
brojac++;
}
}
if (brojac==0)
cout << "U datoteci ne postoji ni jedan radnik sa trazenim spolom." << endl;
dat.close();
};

//funkcija ispisa podataka o radnicima rodjenim u odredjenom rasponu godina
void ispis_podataka_po_godinama(int god1, int god2){
fstream dat;
int brojac=0;
dat.open("radnici.dat",ios::in | ios::binary);
while (1){
dat.read((char *) &radnik,sizeof(radnik));
if (dat.eof()) break;
if (radnik.god_rodj>god1 && radnik.god_rodj<god2){
cout << "Maticni broj: " << radnik.mat_br << endl;
cout << "Ime i prezime: " << radnik.ime_prez << endl;
cout << "Spol: " << radnik.spol << endl;
cout << "Godina rodjenja: " << radnik.god_rodj << endl;
brojac++;
}
}
if (brojac==0)
cout << "U datoteci ne postoji ni jedan radnik u trazenom rasponu godina."<<endl;
dat.close();
};

// main funkcija iz koje se vrsi pozivanje ostalih funkcija
int main()
{
int izbor, mbr, god1, god2;
char spol;
do
{
cout <<"Izaberite :" <<endl<<endl;
cout <<"1. Unos podataka u datoteku"<<endl;
cout <<"2. Ispis svih zapisa iz datoteke"<<endl;
cout <<"3. Ispis podataka o zadanom radniku"<<endl;
cout <<"4. Ispis podataka po spolu"<<endl;
cout <<"5. Ispis podataka po godinama"<<endl;
cout <<"0. Izlaz iz programa"<<endl;
cin >> izbor;
switch (izbor)
{
case 1:unos_podataka_u_datoteku();break;
case 2:ispis_podataka_o_svim_radnicima();break;
case 3: cout << "Unesite maticni broj radnika: ";
cin >> mbr;
ispis_podataka_o_zadanom_radniku(mbr);break;
case 4: cout << "Unesite spol radnika: ";
cin >> spol;
ispis_podataka_po_spolu(spol);break;
case 5: cout << "Unesite manju godinu: ";
cin >> god1;
cout << "Unesite vecu godinu: ";
cin >> god2;
ispis_podataka_po_godinama(god1, god2);break;
case 0: cout << "Kraj programa" << endl;
}
} while (izbor!=0);

system("PAUSE");
return EXIT_SUCCESS;
}

I see dead people
 
0 0 hvala 0
16 godina
odjavljen
offline
Ograničavanje broja znakova u c++

Nemoj koristiti cin, već console::read ili readkey, pa nekon svakog znaka radi provjeru da li je broj (ili čak da li je ispravan za tu znamenku), ako je ispiši ga, odnosno, za slučaj ako nije važeći, a automatski se ispisuje, prebriši ga. Ako je važeći dodaj ga u string ili u kojem ga već formatu spremaš te provjeri da li je to 13. znamenka.

Heart: _/\_/\_/\_/\_/\_/\_/\_/\_ Brain: __________________________
 
0 0 hvala 0
15 godina
neaktivan
offline
RE: Ograničavanje broja znakova u c++
MrBlc kaže...

Nemoj koristiti cin, već console::read ili readkey, pa nekon svakog znaka radi provjeru da li je broj (ili čak da li je ispravan za tu znamenku), ako je ispiši ga, odnosno, za slučaj ako nije važeći, a automatski se ispisuje, prebriši ga. Ako je važeći dodaj ga u string ili u kojem ga već formatu spremaš te provjeri da li je to 13. znamenka.

  o, nisam ja još do te razine programiranja došao  Neodlučan

jel bi ti to mogao napisati i postati ovdje kod čisto da vidim kako bi ti to uradio

hvala

I see dead people
16 godina
neaktivan
offline
RE: Ograničavanje broja znakova u c++

Da li će ti ići tako veliki (13 znamenkasti broj) u int? Možda tu stavit da je polje intova duljine maximalno 13, pa kad učitavaš matični broj, učitavaš u char [13], pa znak po znak ubacuješ u matični broj ako se stvarno radi o nizu znamenki. Ako se ne radi o nizu znamenki, onda ponudiš ponovni upis. Tako ćeš nešto memorije uštedit (char je 4 puta manji od inta). Valjda kužiš kaj mislim.

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
15 godina
neaktivan
offline
RE: Ograničavanje broja znakova u c++
Luuka kaže...

Da li će ti ići tako veliki (13 znamenkasti broj) u int? Možda tu stavit da je polje intova duljine maximalno 13, pa kad učitavaš matični broj, učitavaš u char [13], pa znak po znak ubacuješ u matični broj ako se stvarno radi o nizu znamenki. Ako se ne radi o nizu znamenki, onda ponudiš ponovni upis. Tako ćeš nešto memorije uštedit (char je 4 puta manji od inta). Valjda kužiš kaj mislim.

Shvatio sam nešto... ali volio bih vidjeti kako bi ti to napisao....

I see dead people
16 godina
neaktivan
offline
RE: Ograničavanje broja znakova u c++
Hambrle kaže...
Luuka kaže...

Da li će ti ići tako veliki (13 znamenkasti broj) u int? Možda tu stavit da je polje intova duljine maximalno 13, pa kad učitavaš matični broj, učitavaš u char [13], pa znak po znak ubacuješ u matični broj ako se stvarno radi o nizu znamenki. Ako se ne radi o nizu znamenki, onda ponudiš ponovni upis. Tako ćeš nešto memorije uštedit (char je 4 puta manji od inta). Valjda kužiš kaj mislim.

Shvatio sam nešto... ali volio bih vidjeti kako bi ti to napisao....

 

char str_mat_broj[13];

int ponovni_upis=1;

 

//maticni_broj je int*

 

while (ponovni_upis)

{

      cin>>str_mat_broj; //valjda ide cin sa char*, ne sjećam se

 

      if ( lenght(str_mat_broj)!=13 || nisu_znamenke(str_mat_broj) cout<<"Krivi unos!!"<<endl;

      else

     {

         struktura[i].maticni_broj = pretvori(str_mat_broj);

         ponovni_upis=0;

    }

}

Evo tako nešto, samo treba to prilagodit još tvojim potrebama. nisu_znamenke i pretvori su funkcije koje je lako napisati :D

 

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice