Natrag   Forum.hr > Informatička tehnologija > Za napredne korisnike > Programiranje

Programiranje Za programere i one koji to žele postati ...

Odgovor
 
Tematski alati Opcije prikaza
Old 10.06.2012., 23:45   #1
c++ unos podataka

Evo problem jedan

Priliko unosa teksta /stirngovi dakle) ako koristim "cin" program mi dopušta da stisnem višesturke entere i tek onda onda unesem tekst pa lupim enter za dalje. Prilikom korištenja getline(cin, varijabla, '\n') to nije moguće. Ukoliko pak koristim cin, on će čitati sve do razmaka što mi ne odgovara jer će se raditi o unosu više riječi. Dakle, trebam neki način kako da učitam rečenicu " Pero bijelo nešto treće" u varijablu tipa string te da se završava unos prilikom pritiska Entera, ali istovremeno da kada se pojavi upit za unosom da korisnik može stisnuti višesturke entere i da program čeka dok se korisnik ne smisli nešto unašati.

Da li će se u konačniic raditi o fuknciji koju ću pozivati za unos, ili o gotovim funkcijama ili ću nadograditi operatore unosa je manje bitno. Samo me zanima kako je najbolj eovo riješiti za program koji sam već kenuo raditi pa reko da i doskočim problematici oko unosa jer znam da će biti slučajeva kada se više puta stisnuti Enter za redom što rezultira rušenjem programa.

EDIT : - pitanje2

Kako bi izgledoa operator unosa za float tip podataka koji može primiti i "." i "," kao oznaku za decimalno mjesto. Primjerice :

30.4 i 30,4 da bude ispravan unos. Namjerno ne želim raditi unos kao string pa konverziju u float pomoću funkcije.

Zadnje uređivanje MijenjamSe : 11.06.2012. at 00:13.
MijenjamSe is offline  
Odgovori s citatom
Old 11.06.2012., 03:17   #2
Možeš napraviti petlju u kojoj čitaš znak po znak i stavljaš i string.

Radiš cin.get() sve dok !='\n'

a onda string+=cin.get()

te na kraju još jedan cin.get() da flushaš ovaj zadnji \n.

Iako, imam osjećaj da može puno jednostavnije :/

Za ovo drugo ne znam neko jednostavno rješenje. Možda netko iskusniji.

EDIT: Sad mi za ovo prvo još neke ideje padaju. Možeš napraviti cin>>string1>>string2>>string3 itd. pa spojiti te stringove. Možda bi noskipws pomogao, ili sam ga krivo shvatio.
__________________
La diplomatie sans une armée, c'est comme la musique sans instruments.

Zadnje uređivanje alfis : 11.06.2012. at 03:23.
alfis is offline  
Odgovori s citatom
Old 11.06.2012., 04:30   #3
ovo sa cin.get != '\n' neće baš raditi jer ja želimomogućiti da se stisne hrpa puta enter

Dakle, probaj naoraviti ovo :
cout << " Unesi nesto : ";cin>>x;

druga verzija:
cout << " Unesi nesto : ";getline(cin,x,'\n').

S prvom verzijom možeš lupiti 10 entera ako oćeš i onda krenuti sa unosom. Pomoću getline-a to nije moguće.

PS, evo treće pitanje :

Imam nekoliko klasa sa nekim javnim varijablama i funkcijama. Ovisno kako mi je trebalo. Ugl, napravio sam globalnu funkciju koja bi nakon što korisnik unese 20-ak parametara u različite varijable izlistala na ekran što je sve unio ( kao pregled prije spremanja ) i onda upit želi li tako spremiti. Ako se odabere, da želi, onda se to sprema u txt datoteke.
E sad me zanima kako mogu pristupiti tim javnim elementima klasa iz globalne funkcije ? :/
Klasa::funkcija() mi ne radi (ako IntelliSense ponudi opcije nakon upisa "Klasa::" no ne može tako se pristupiti.
MijenjamSe is offline  
Odgovori s citatom
Old 11.06.2012., 08:52   #4
deklariraj varijablu string i onda pomoću cin -a učitavaj tok. A ako želiš da program čeka dva ili tri entera prije nego nastavi sa radom, onda pomoću ili if uvjeta ili malene petlje pauziraj unos podataka.
logit is offline  
Odgovori s citatom
Old 11.06.2012., 14:46   #5
To što pričaš nema smisla jer ja ne mogu znati koliko puta će korisnik lupiti enter prije nego se smisli unijeti valjane podatke. U opciju eventualno ulazi do-while petlja s uvjetom string!="".
Sam "cin" dopušta višestruke "\n" dok se ne krene unositi tekst odnosno barem jedan znak.
MijenjamSe is offline  
Odgovori s citatom
Old 11.06.2012., 23:37   #6
http://www.cplusplus.com/reference/s...string/append/
logit is offline  
Odgovori s citatom
Old 12.06.2012., 13:03   #7
Nisam pitao kako spremiti u datoteku već kako prenijet niz znakova da mu označe početak, i drugi niz koji su limiteri.
MijenjamSe is offline  
Odgovori s citatom
Old 12.06.2012., 16:44   #8
Quote:
MijenjamSe kaže: Pogledaj post
Nisam pitao kako spremiti u datoteku već kako prenijet niz znakova da mu označe početak, i drugi niz koji su limiteri.
Koja crna datoteka te skopala ?
String::append je dodavanje stringa na string, da sam stavio link na fstream onda bih rekao da sam u krivu, ali se meni cini da niti ti sam neznas sto zelis. Bjezim ca van teme.
logit is offline  
Odgovori s citatom
Old 18.06.2012., 23:11   #9
Quote:
MijenjamSe kaže: Pogledaj post
Evo problem jedan

Priliko unosa teksta /stirngovi dakle) ako koristim "cin" program mi dopušta da stisnem višesturke entere i tek onda onda unesem tekst pa lupim enter za dalje. Prilikom korištenja getline(cin, varijabla, '\n') to nije moguće. Ukoliko pak koristim cin, on će čitati sve do razmaka što mi ne odgovara jer će se raditi o unosu više riječi. Dakle, trebam neki način kako da učitam rečenicu " Pero bijelo nešto treće" u varijablu tipa string te da se završava unos prilikom pritiska Entera, ali istovremeno da kada se pojavi upit za unosom da korisnik može stisnuti višesturke entere i da program čeka dok se korisnik ne smisli nešto unašati.

Da li će se u konačniic raditi o fuknciji koju ću pozivati za unos, ili o gotovim funkcijama ili ću nadograditi operatore unosa je manje bitno. Samo me zanima kako je najbolj eovo riješiti za program koji sam već kenuo raditi pa reko da i doskočim problematici oko unosa jer znam da će biti slučajeva kada se više puta stisnuti Enter za redom što rezultira rušenjem programa.

EDIT : - pitanje2

Kako bi izgledoa operator unosa za float tip podataka koji može primiti i "." i "," kao oznaku za decimalno mjesto. Primjerice :

30.4 i 30,4 da bude ispravan unos. Namjerno ne želim raditi unos kao string pa konverziju u float pomoću funkcije.
@Alfis je bio na doborm putu da ti to objasni.
Moras skenirati znak po znak i onda na svaki znak odluciti sto zeils napraviti.
Ali ne upotrebljavas "cin.get() sve dok !='\n'" nego
napravis ovako nesto

Kod:
#include <conio.h>

main()
{
 char ch;
 
 string s;
 while (ch != 13)  // 13 je char broj za "enter"
        {
         s += ch;
         ch = getch();
        }

 // kada izadjes iz petlje (stisnuo si enter) dalje mozes provjeravati stavec hoces na upisanom stringu. 
}
Nisam sada siguran za tocke ili zareze ali pogledaj 'atof' funkciju sto radi. Mislim da je njoj svejedno da li je tocka ili zarez izmedju decimalnih mjesta
odiee is offline  
Odgovori s citatom
Odgovor



Kreni na podforum




Sva vremena su GMT +2. Trenutno vrijeme je: 09:49.