Pereiti prie turinio

C++ spausdinimo funkcija


Rekomenduojami pranešimai

Sveiki, parašiau kodą, bet yra viena bėda - atliekant spausdinimą atspausdinami tik paskutinio studento duomenys. Gal galite pasakyti kur klaida ir paaiškinti kaip ją ištaisyti?

 

#include <iostream>
#include <string>
#include <cstdlib>
#include <iomanip>
using namespace std;
struct asmuo {
		asmuo* tolimesnis;
		string vardas;
		string pavarde;
		int pazymys[5];
		float vidurkis;
		};
//=========================================prototipai
void spausdink(asmuo* pradzia);
void naikink(asmuo* kazkas);
asmuo* formuok(istream& ivestis);
//========================================pagrindinė programa
int main()
{
asmuo* studentas;
studentas = formuok(cin);
cout << endl;
spausdink(studentas);
naikink (studentas);
system("pause");
return 0;
}
//=======================================SPAUSDINK
void spausdink(asmuo* pradzia)
{
for (; pradzia!=NULL; pradzia=pradzia -> tolimesnis)
{
	cout << setw(10) << pradzia->vardas;
	cout << setw(20) << pradzia->pavarde;
	for(int i=0; i<5; i++)
	{ cout << setw(4)<<pradzia->pazymys[i] << " ";}
	cout << setw(5) << setprecision(3) << pradzia->vidurkis<<endl;
}
cout << endl;
}
//======================================FORMUOK
asmuo* formuok(istream& ivestis)
{
asmuo* pradzia = NULL;
asmuo* pabaiga = NULL;
asmuo* naujas = new asmuo();
int i, j, n;

cout << "Kiek grupeje studentu?";
cin >> n;
for(i=0; i<n; i++)
{
	cout << "Iveskite " << i+1 << " studento varda (iki 20 simboliu) ";
	ivestis >> naujas -> vardas;
	cout << "Iveskite " << i+1 << " studento pavarde (iki 20 simboliu) ";
	ivestis >> naujas -> pavarde;
	cout << "Iveskite " << i+1 << " studento pazymius (sveikasis skaicius) " << endl;
	naujas -> vidurkis = 0;
	for(j=0; j<5; j++)
	{
		cout << "Iveskite " << j+1 << "-aji pazymi: ";
		ivestis >> naujas -> pazymys[j];
		naujas -> vidurkis = naujas -> vidurkis + naujas -> pazymys[j];
	}
	naujas -> vidurkis = naujas -> vidurkis / 5;
	naujas->tolimesnis = NULL;
}
if (pradzia == NULL)
{ 
	pradzia = naujas;
	pabaiga = naujas;
}else{
	pabaiga -> tolimesnis = naujas;
}
pabaiga = naujas;
return pradzia;
}
//=====================================================NAIKINK
void naikink(asmuo* kazkas)
{
asmuo* laikinas;
for (asmuo* kuris = kazkas; kuris != NULL; kuris = laikinas)
{
	laikinas = kuris -> tolimesnis;
	delete kuris;
}
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jeigu sukuri tik vieną linked listo node'ą, tai egzistuos tik vienas elementas.

 

Keletas pastabų:

 

Siūlyčiau paskaityti kieno nors kito rašytą C/C++ kodą, nes tavo stilius baisokas, o dekompozicija (programos „skaldymas“ į funkcijas) nelogiška, todėl sukelia priešingą, nei tikėtasi, efektą - padaro programą dar mažiau skaitomą.

 

Principe, tu turėtum maine sukti ciklą, kuriame nuskaitai duomenis, o tada tuos duomenis ir pointerį į pirmą elementą paduodi list_add(node *&head, string &f_name, string &l_name, int grades[]) funkcijai, katra jau ir įdės į tą listą.

 

Beje, o ką daryti, jeigu aš esu kilmingas ir turiu kokius 9 vardus? :-) Naudok std::string, arba getline(), nes dabar varde įvedus 10 simbolių ('\0' bus 11-as), gauni buffer overflow. Beje, mano laikais, maksimalus pažymys būdavo 10, o dabar galiu įvesti MAX_INT arba -10.

 

 

 

 

Sėkmės.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...