While loop problem C++


#1

Znači zadatak ide ovako:

Napisati funkciju saberi koja uzima dva vektora realnih brojeva. Ukoliko su vektori iste dužine, funkcija dodaje elemente drugog vektora odgovarajućim elementima prvog vektora. U slučaju da se dužine vektora razlikuju, funkcija treba da generira exception tipa domain_error. Funkcija ne vraća ništa.
Izabrati odgovarajući način prosljeđivanja parametara u funkciju. Napisati i odgovarajući program kojim se testira kreirana funkcija.

Tako da sam napisao sljedeći kod:

#include
#include
#include
using namespace std;
void saberi(vector a, vector& b)
{
vector::iterator ita,itb;
ita=a.begin();
itb=b.begin();
if(a.size()==b.size())
{
while(ita!=a.end())
{
*ita+=*itb;
ita++;
itb++;
}
}
else
throw domain_error(“Nizovi nisu iste dužine!”);
return;
}
int main()
{
vector a,b;
vector::iterator it;
double x;
cout << “Unesite elemente prvog niza.” << endl;
while(cin >> x)
a.push_back(x);
cout << “Unesite elemente drugog niza.” << endl;
while(cin >> x)
b.push_back(x);
try
{
saberi(a,b);
}
catch(exception &err)
{
cout << err.what();
return 0;
}
cout << “Elementi niza nakon sabiranja su:” << endl;
for(it=a.begin();it!=a.end();it++)
cout << *it << endl;
return 0;
}

Kod kompajliram pomoću clang-a.Pri pokretanju programa sve ide normalno do while petlje koja ubacuje elemente drugog niza. Nakon što ispiše “Unesite elemente drugog niza.” tu while petlju jednostavno preskoči i pokrene funkciju saberi koja naravno vraća grešku.Zašto???


#2

Prije druge while petlje dodaj ovo:

cin.clear(); cin.ignore(10000,'\n');


#3

Zatim pogledaj sta proslijedujes u funkciju saberi, dali ce vektor a uopste biti promijenjen?


#4

Hvala vam velika. Dodao sam samo cin.clear() ispred petlje. To što mi funkcija saberi uzima b po referenci mi je ostalo slučajno, to sam popravio.


#5

Ne znam sto svi toliko hocete da kompajlirate preko tog clanga, iako je Amer rekao, dovoljan je g++ :stuck_out_tongue:


#6

:smiley:


#7

Daje bolje poruke grešaka. Probaj


#8

Mislim da gcc 4.8 sad ima slican output ipak i meni je Clang nekako drazi kad ja nesto pisem al’ kad kompajlujem nesto sto cu koristiti uvijek gcc.


#9

Evo da ne otvaram novu temu pitat ću ovdje. Zašto program kompajliran na jednom računaru neće raditi na drugom?


#10

Tu moze da utice vise faktora: razlicite arhitekture (procesori), OS-ovi cak i verzije (g)libc biblioteke; npr. ako si kompajlirao na zadnjoj verziji (g)libc-a, vjerovatno nece raditi na starijoj verziji zbog razlicitog ABI-ja.

Mislim da se na ovo pitanje odgovori (ili barem treba odgovoriti) u prvim casovima nekog C/C++ kursa. Ako to nije slucaj kod tebe, kurs ili je lose organizovan ili predavac nema pojma ili je u pitanju nesto drugo. C/C++ ne idu bez nekih osnova arhitekture; zamisli da ides na kurs za pilota a nikad nisi cuo za avion.


#11

Hoće li pomoći ako statički linkujem standardne biblioteke?


#12

Hoće