Pomoc za zadatak sa strukturama

Pomoc za zadatak sa strukturama

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.
offline
  • Pridružio: 24 Apr 2015
  • Poruke: 190

Ortak, izvini, al te ja nista ne razumen



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.

offline
  • Pridružio: 14 Feb 2008
  • Poruke: 12389

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; }

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!!! Very Happy

offline
  • Pridružio: 14 Feb 2008
  • Poruke: 12389

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 Ziveli

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. Very Happy

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 Razz

Ko je trenutno na forumu
 

Ukupno su 560 korisnika na forumu :: 8 registrovanih, 2 sakrivenih i 550 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: Acivi, Boris90, kybonacci, M1los, sabros, vasa.93, Vl veliki, yrraf