Poslao: 25 Apr 2015 15:45
|
offline
- Birdyy
- Novi MyCity građanin
- Pridružio: 25 Apr 2015
- Poruke: 4
|
Pozdrav! Radim na zadatku sa strukturama, i upisom podataka u text fajl i imam jednu nejasnocu...
Unosim ime, prezime i broj bodova takmicara, ali se samo prvi put preskoci unos za ime takmicara.
Ako neko ima vremena i strpljenja da pregleda kod, bio bih mu veoma zahvalan.
#include<iostream>
#include<string>
#include<sstream>
#include<cstdlib>
#include<fstream>
using namespace std;
struct takmicenje {
string ime;
string prezime;
int bodovi;
}takmicar;
ofstream myfile ("takmicenje.txt");
int main () {
int a,b,c,d,n,s,i;
string str,kraj;
pocetak:
i=0;
cout<<"OBRADA REZULTATA TAKMICENJA"<<endl<<endl;
cout<<"- Izbor akcije -"<<endl<<endl;
cout<<"1 .. Dodavanje podataka "<<endl<<"2 .. "<<endl<<"3 .. "<<endl<<"4 .. "<<endl<<"5 .. "<<endl<<"6 .. "<<endl<<"7 .. "<<endl<<endl<<"8 .. "<<endl<<endl<<"[1-8] -> ";
cin>>a;
kraj="kraj";
if(a==1)
{
unos:
while(i<=10000)
{
system ("cls");
cout<<"UNOS / DODAVANJE PODATAKA, ZA IZLAZ UKUCAJTE 'kraj' "<<endl<<endl;
cout<<"Unesite ime: ";
getline(cin,takmicar.ime);
cout<<"Unesite prezime: ";
getline(cin,takmicar.prezime);
if(kraj==takmicar.prezime)
{
system("cls");
goto pocetak;
}
cout<<"Unesite broj bodova: ";
getline(cin,str);
stringstream(str)>>takmicar.bodovi;
myfile<<takmicar.ime<<" "<<takmicar.prezime<<" "<<takmicar.bodovi<<endl;
}
}
else if (a==2)
{
}
myfile.close();
system("pause");
return 0;
}
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
|
Poslao: 25 Apr 2015 16:42
|
offline
- Birdyy
- Novi MyCity građanin
- Pridružio: 25 Apr 2015
- Poruke: 4
|
Pokreni ovaj kod, biće ti jasno.
U jednom ciklusu for petlje, treba da se unese ime, prezime i broj bodova takmičara, medjutim samo u prvom ciklusu program preskače unos za ime takmičara. U sledećim unosima nema problema. Ne vidim grešku u kodu, iako ga gledam već sat vremena. Nadam se da sam razjasnio problem.
|
|
|
|
Poslao: 26 Apr 2015 00:46
|
offline
- Srki94
- Mod u pemziji
- Pridružio: 14 Feb 2008
- Poruke: 12400
|
Zdravo o/
Koristi code tagove kada postuješ kod na forum.
Ja ne znam jezik ali mi je bio interesantan problem pa sam uspeo da ispravim problem na dva načina.
Preporučio bih da sačekaš nekog ko zna jezik da potvrdi da je ovo OK.
Mislim da je prvo rešenje OK dok je drugo samo zarkpa koja nije dobra...
Oba rešenja rade.
Rešenje #1 - ignorisanje newline chara nakon unosa inta za izbor akcije programa :
// ConsoleApplication1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
#include<string>
#include<sstream>
#include<cstdlib>
#include<fstream>
using namespace std;
struct takmicenje {
string ime;
string prezime;
int bodovi;
}takmicar;
ofstream myfile("takmicenje.txt");
int main() {
int a, b, c, d, n, s, i;
string str, kraj;
pocetak:
i = 0;
cout << "OBRADA REZULTATA TAKMICENJA" << endl << endl;
cout << "- Izbor akcije -" << endl << endl;
cout << "1 .. Dodavanje podataka " << endl << "2 .. " << endl << "3 .. " << endl << "4 .. " << endl << "5 .. " << endl << "6 .. " << endl << "7 .. " << endl << endl << "8 .. " << endl << endl << "[1-8] -> ";
cin >> a;
cin.ignore(1, '\n');
kraj = "kraj";
if (a == 1)
{
unos:
while (i <= 10000)
{
system("cls");
cout << "UNOS / DODAVANJE PODATAKA, ZA IZLAZ UKUCAJTE 'kraj' " << endl;
cout << "Unesite ime: ";
getline(cin, takmicar.ime);
cout << "Unesite prezime: ";
getline(cin, takmicar.prezime);
if (kraj == takmicar.prezime)
{
system("cls");
goto pocetak;
}
cout << "Unesite broj bodova: ";
getline(cin, str);
//
stringstream(str) >> takmicar.bodovi;
myfile << takmicar.ime << " " << takmicar.prezime << " " << takmicar.bodovi << endl;
}
}
else if (a == 2)
{
}
myfile.close();
system("pause");
return 0;
}
Rešenje #2 - ignorisanje newline chara samo tokom prvog ponavljanja :
// ConsoleApplication1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
#include<string>
#include<sstream>
#include<cstdlib>
#include<fstream>
using namespace std;
struct takmicenje {
string ime;
string prezime;
int bodovi;
}takmicar;
ofstream myfile("takmicenje.txt");
int main() {
int a, b, c, d, n, s, i;
string str, kraj;
pocetak:
i = 0;
cout << "OBRADA REZULTATA TAKMICENJA" << endl << endl;
cout << "- Izbor akcije -" << endl << endl;
cout << "1 .. Dodavanje podataka " << endl << "2 .. " << endl << "3 .. " << endl << "4 .. " << endl << "5 .. " << endl << "6 .. " << endl << "7 .. " << endl << endl << "8 .. " << endl << endl << "[1-8] -> ";
cin >> a;
system("cls");
kraj = "kraj";
if (a == 1)
{
unos:
int tmpCounterFix = 0;
while (i <= 10000)
{
system("cls");
cout << "UNOS / DODAVANJE PODATAKA, ZA IZLAZ UKUCAJTE 'kraj' " << endl;
cout << "Unesite ime: ";
if (tmpCounterFix == 0){
cin.ignore(1, '\n');
}
getline(cin, takmicar.ime);
cout << "Unesite prezime: ";
getline(cin, takmicar.prezime);
if (kraj == takmicar.prezime)
{
system("cls");
goto pocetak;
}
cout << "Unesite broj bodova: ";
getline(cin, str);
//
stringstream(str) >> takmicar.bodovi;
myfile << takmicar.ime << " " << takmicar.prezime << " " << takmicar.bodovi << endl;
tmpCounterFix++;
}
}
else if (a == 2)
{
}
myfile.close();
system("pause");
return 0;
}
|
|
|
|
Poslao: 26 Apr 2015 23:54
|
offline
- Birdyy
- Novi MyCity građanin
- Pridružio: 25 Apr 2015
- Poruke: 4
|
Nije mi jasno sta taj dio koda radi, ni zasto je uopste dolazilo do onog problema, ali sada sve radi kako treba...Hvala mnogo!!!
|
|
|
|
Poslao: 27 Apr 2015 09:22
|
offline
- Srki94
- Mod u pemziji
- Pridružio: 14 Feb 2008
- Poruke: 12400
|
Kada pritisneš enter prvi put u meniju tvog programa, pokupi se new line char zajedno sa unosom.
Sledeći getline je pokupio taj new line char i shvatio je to kao unos od korisnika (enter).
Zato se samo prvi put dešavao problem a ne tokom sledeće rotacije.
Mislim da možeš da koristiš cin.ignore() samo posle tog menija, to bi trebalo da očisti char stream što nije problem u ovom slučaju. Isto mislim da će ti moj kod praviti frku ako imaš više od 1. unosa u tom meniju međutim nisam testirao.
Uopšte za cin.ignore pogledaj ovde :http://stackoverflow.com/questions/25475384/when-and-why-do-i-need-to-use-cin-ignore-in-c
Za bilo šta detaljnije treba neko ko zna jezik da odgovori jer ja blage veze nemam
|
|
|
|
Poslao: 28 Apr 2015 00:44
|
offline
- Birdyy
- Novi MyCity građanin
- Pridružio: 25 Apr 2015
- Poruke: 4
|
Ali zar nije taj prvi Enter potvrda za unos akcije, kako se to moze ocitati na unos imena, to nzm...
Uzeo sam tvoje prvo resenje, i radi sve savrseno, sada mi meni izgleda ovako:
1 .. Unos takmicara
2 .. Izmena podataka
3 .. Brisanje podataka
4 .. Prikaz podataka
5 .. Sortiranje podataka
6 .. Pisanje podataka u fajl
7 .. Citanje iz fajla
8 .. Kraj rada
Uspeo sam sve realizovati osim citanja, ali nacicu neku ideju i za to.
Mislim da cin.ignore() ne smeta jer nije u while petlji pa se izvrsava iskljucivo posle cin>>a, a kasnije sam ga koristo ponovo posle prikaza podataka kao press any key
|
|
|
|