Prečo mi tento zdroj nefunguje? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Prečo mi tento zdroj nefunguje? – C / C++ – Fórum – Programujte.comPrečo mi tento zdroj nefunguje? – C / C++ – Fórum – Programujte.com

 

Timeshifter0
Newbie
12. 7. 2009   #1
-
0
-

Robil som úlohu z 5. lekcie C++ ale diskusia k lekciám je značne mŕtva, tak to dám sem.
Zdroják:

#include <iostream>   //1 

//2
using namespace std; //3
int main() //4
{ //5
cout << "Zadaj pocet zamestnancov!\n"; //6
int pocet; //7
cin >> pocet; //8
cin.get(); //9
struct zamestnanci //10
{ //11
char meno[15]; //12
int vek; //13
char mesto[15]; //14
} osoba[32000]; //15
char pokr[2]; //16
int i; //17
for(i=0;i<pocet;i++) //18
{
cout << "\nZadaj meno " << i+1 << ". zamestnanca! (menej nez 15 znakov)\n"; //20
cin >> osoba[i].meno; //21
cout << "Zadaj jeho vek!\n"; //22
cin >> osoba[i].vek; //23
cout << "Zadaj jeho mesto! (menej nez 15 znakov)\n"; //24
cin >> osoba[i].mesto; //25
cout << "\nChcete pokracovat? A/N \n"; //26
cin.get(pokr, 1); //27
if(pokr == "n" || pokr == "N") //28
pocet = i; //29
}
cout << endl << endl << "\t\tZamestnanci" << endl; //31
for(i=0;i<pocet;i++) //32
{
cout << "Zamestnanec cislo " << i+1 << " - " << osoba[i].meno << endl; //34
cout << "Vek: " << osoba[i].vek << endl; //35
cout << "Mesto: " << osoba[i].mesto << endl << endl;
}
return 0;
}

Vždy po skompilovaní (0 errors) my to vyhodí chybu

Unhandled exception at 0x004125f7 in Projekt 5.exe: 0xC00000FD: Stack overflow.

Nahlásit jako SPAM
IP: 85.135.175.–
KIIV
~ Moderátor
+43
God of flame
12. 7. 2009   #2
-
0
-

hadam ze je trochu moc mit tak velkou promennou ... resp pole struktur..
pocitej napriklad s maximem kolem 100 nebo do 1000 pripadne pouzij neco z vyssich lekci - stl kontejnery (vector)

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KIIV
~ Moderátor
+43
God of flame
12. 7. 2009   #3
-
0
-

jo taky porovnavas ukazatele ... "N" a pokr - nikoliv jejich obsah... lepsi kdyz nactes jen jeden znak a ten srovnas s 'N' nebo 'n'

+ kdyz sem to krokoval tak je problem jeste s tim cin.get() asi to nastavi chybu na cin a pak to vse za nim neprobehne spravne

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Timeshifter0
Newbie
13. 7. 2009   #4
-
0
-

KIIV napsal:
hadam ze je trochu moc mit tak velkou promennou ... resp pole struktur..
pocitej napriklad s maximem kolem 100 nebo do 1000 pripadne pouzij neco z vyssich lekci - stl kontejnery (vector)


Aha, takže tam mám dávať apostrofy namiesto úvodzoviek... Vlastne, vyhadzuje mi to chybu pri tom porovnávaní. Teda, ako môžem porovnávať 2 údaje typu char?

Nahlásit jako SPAM
IP: 85.135.165.–
KIIV
~ Moderátor
+43
God of flame
13. 7. 2009   #5
-
0
-

To Timeshifter : dva udaje typu char nejsou problem .. problem je pole charu a char...
hod tam pokr[0] == 'n'
jeden znak se znakem
nebo nacitej jen jeden znak..

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Timeshifter0
Newbie
13. 7. 2009   #6
-
0
-

To KIIV :
Diki Moc! Už som to aj tak spravil tak, že som zaviedol ďalšie premenné char. Tuto je opravený zdroják, ale aj tak mi to nechce vyhodiť z ciklu, ak stlačím N/n, nevieš, čo s tým?

#include <iostream>   //1

//2
using namespace std; //3
int main() //4
{ //5
cout << "Zadaj pocet zamestnancov!\n"; //6
int pocet; //7
cin >> pocet; //8
cin.get(); //9
struct zamestnanci //10
{ //11
char meno[15]; //12
int vek; //13
char mesto[15]; //14
} osoba[100]; //15
char pokr[2]; //16
int i; //17
for(i=0;i<pocet;i++) //18
{
cout << "\nZadaj meno " << i+1 << ". zamestnanca! (menej nez 15 znakov)\n"; //20
cin.get(osoba[i].meno, 15); //21
cin.get();
cout << "Zadaj jeho vek!\n"; //22
cin >> osoba[i].vek; //23
cin.get();
cout << "Zadaj jeho mesto! (menej nez 15 znakov)\n"; //24
cin.get(osoba[i].mesto, 15); //25
cin.get();
cout << "\nChcete pokracovat? A/N \n"; //26
cin.get(pokr, 1); //27
cin.get();
char mn[]="n";
char vn[]="N";
if(pokr == mn || pokr == vn) //28
pocet = i; //29
}
cout << endl << endl << "\t\tZamestnanci" << endl; //31
for(i=0;i<pocet;i++) //32
{
cout << "Zamestnanec cislo " << i+1 << " - " << osoba[i].meno << endl; //34
cout << "Vek: " << osoba[i].vek << endl; //35
cout << "Mesto: " << osoba[i].mesto << endl << endl;
}
return 0;
}

Nahlásit jako SPAM
IP: 85.135.165.–
KIIV
~ Moderátor
+43
God of flame
13. 7. 2009   #7
-
0
-

si to moc nezmenil.. jen si presunul "n" pred tu podminku :D

neco jako

char volba;
volba = cin.get();

if ( volba == 'n' || volba == 'N' ) ...

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Timeshifter0
Newbie
13. 7. 2009   #8
-
0
-

No, jo... A to som nemal?
Ja vlastne namiesto tej premennej volba tam mám pokr (akože pokračovať). Do tej načítam nejaké písmeno a ak je to písmeno malé alebo velké N, tak by mi malo premeniť hodnotu počet a tým by mi potom nemala platiť podmienka v cykle a teda by mal cyklus skončiť... No nefunguje to. Ak napíšem N alebo n, tak mi to dokončí všetky cykli tak, že vypíše všetko, ale nemôžem nič zapisovať a ak dám nejaké iné písmeno, tak mi to vyhodí z programu...

//Edit: Po úpravách mi to už ide... Pár vecí som tam pomenil a hlavne poopravil niektore cin.gety. Program nakoniec vyzerá takto:

#include <iostream>   //1

//2
using namespace std; //3
int main() //4
{ //5
cout << "Zadaj pocet zamestnancov!\n"; //6
int pocet; //7
cin >> pocet; //8
cin.get(); //9
struct zamestnanci //10
{ //11
char meno[16]; //12
int vek; //13
char mesto[16]; //14
} osoba[100]; //15
char pokr[2]; //16
int i; //17
for(i=0;i<pocet;i++) //18
{
cout << "\nZadaj meno " << i+1 << ". zamestnanca! (menej nez 15 znakov)\n"; //20
cin.get(osoba[i].meno, 16); //21
cin.get();
cout << "Zadaj jeho vek!\n"; //22
cin >> osoba[i].vek; //23
cin.get();
cout << "Zadaj jeho mesto! (menej nez 15 znakov)\n"; //24
cin.get(osoba[i].mesto, 16); //25
cin.get();
cout << "\nChcete pokracovat? A/N \n"; //26
cin.get(pokr, 2); // Tu bola chyba, mal som tam len "1"
cin.get();
char mn[]="n";
char vn[]="N";
if(pokr[0] == mn[0] || pokr[0] == vn[0]) //Pridal som indexy
pocet = i; //29
}
cout << endl << endl << "\t\t\tZamestnanci" << endl; //31
for(i=0;i<(pocet+1);i++) //K podmienke som pripísal +1
{
cout << "Zamestnanec cislo " << i+1 << " - " << osoba[i].meno << endl; //34
cout << "Vek: " << osoba[i].vek << endl; //35
cout << "Mesto: " << osoba[i].mesto << endl << endl;
}
cin.get();
return 0;
}

Diki moc za pomoc!

Nahlásit jako SPAM
IP: 85.135.165.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 9 hostů

Podobná vlákna

Proc nefunguje tento kod — založil kucape2

Zdroj ? — založil Erik

Vizualizace zdroj kodu — založil Fires

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý