[c++] czym przystopować program w linuxie
-
- Użytkownik
- Posty: 5
- Rejestracja: 21 lis 2007, o 21:06
- Płeć: Kobieta
- Lokalizacja: Kraków
[c++] czym przystopować program w linuxie
na przykład co istnieje w zamian za brak system("PAUSE"); albo getchar(); ?
- Calasilyar
- Użytkownik
- Posty: 2656
- Rejestracja: 2 maja 2006, o 21:42
- Płeć: Mężczyzna
- Lokalizacja: Wrocław/Sieradz
- Podziękował: 29 razy
- Pomógł: 410 razy
[c++] czym przystopować program w linuxie
getchar() wystarcza po co szukać dalej? A tak na serio to nie warto opierać się na wywołaniach systemowych, bo wtedy cierpi przenośność programu...
-
- Użytkownik
- Posty: 5
- Rejestracja: 21 lis 2007, o 21:06
- Płeć: Kobieta
- Lokalizacja: Kraków
[c++] czym przystopować program w linuxie
Kod: Zaznacz cały
//
// File: newmain.cc
// Author:
//
// Created on 10 styczeń 2008,
//
#include <iostream>
#include <stdlib.h>
#include <string>
#include <fstream>
#include <cstdlib>
//biblioteki
using namespace std;
typedef string TDana;
typedef long int lgi;
class KlasaDrzewo
{
private:
KlasaDrzewo *wskl,*wskp; //wskazniki na lewego i prawego syna
KlasaDrzewo *pop; //wskaznik na ojca
public:
TDana wartosc; //wartosc w wezle
lgi ilosc; //ilosc elementow tych samych
lgi index; //index kolejnych elementow
typedef KlasaDrzewo* drzewo;
drzewo korzen; //wskaznik na korzen
drzewo wezel; //nowy wezel
void buduj (TDana wartosc, drzewo korzen, lgi index);
void preorder(KlasaDrzewo *wezel, TDana &zmienna, lgi &ile);
void wypisz_max();
friend KlasaDrzewo * inicjalizuj_korzen(KlasaDrzewo *wezel);
};
TDana zmienna;
lgi ile = 0;
int menu(KlasaDrzewo *wezel);
void stop();
int main(int argc, char** argv)
{
KlasaDrzewo *korzen = new KlasaDrzewo;
KlasaDrzewo *wezel = new KlasaDrzewo;
korzen = inicjalizuj_korzen(wezel);
menu(korzen);
return (EXIT_SUCCESS);
}//main
int menu(KlasaDrzewo *korzen)
{
char opzione;
while(true)
{
cout <<"***Menu***\n1) dodaj\n2) wypisz preorder\n0) exit\n";
cin >>opzione;
switch(opzione)
{
case '1':{
ifstream strum;
string nazwa_pliku,p;
cout <<"Podaj sciezke pliku wejsciowego ('0' -> plik domyslny) ";
cin >>nazwa_pliku;
if (nazwa_pliku=="0") nazwa_pliku = "plik.txt";
cout <<nazwa_pliku <<endl;
strum.open(nazwa_pliku.c_str(), ios::in );
if(!strum)
{
cout <<"Nie moge otworzyc takiego pliku\n";
system("clr");
menu(korzen);
}
//----------------------------------------------------------------
string w;
//cout <<"wpisz ciag wartosci i '.' aby zakonczyc\n" <<flush;
while (true)
{
strum >>w;
if(strum.eof()){break;}
korzen->index++;
korzen->buduj(w, korzen, korzen->index);
}//while
stop();
system("clr");
break;}
case '2':{
korzen->preorder(korzen,zmienna,ile);
cout <<"Najczesciej wystapil element\""
<<zmienna <<"\" " <<ile <<" razy.\n";
stop();
system("clr");
break;}
case '0':{
exit(1);}
default: {system("clr");menu(korzen);}
}//switch
}//while
}//menu
void KlasaDrzewo::buduj(TDana wartosc, drzewo korzen, lgi index)
{
KlasaDrzewo *pop = new KlasaDrzewo;
KlasaDrzewo *tmp = new KlasaDrzewo;
KlasaDrzewo *wezel = new KlasaDrzewo;
tmp=korzen;
while (tmp!=NULL)
{
if (wartosc==tmp->wartosc)
{
tmp=NULL;
tmp->ilosc++;
}
else if (wartosc<tmp->wartosc)
{
pop=tmp;
tmp=tmp->wskl;
if (tmp==NULL)//dodaj element do drzewa
{
wezel = new KlasaDrzewo;//utworz nowy wezel
pop->wskl=wezel;//daj na niego wskaznik z poprzednika
wezel->pop=pop;//daj wskaznik z niego do poprzednika
wezel->wartosc=wartosc;//wstaw wartosc
wezel->index=index;
wezel->wskl=NULL; wezel->wskp=NULL;//ustaw wskazniki na synow
wezel->ilosc=1;
}
}//jesli mniejsza wartosc niz wezel
else
{
pop=tmp;
tmp=tmp->wskp;
if (tmp==NULL) //dodaj element do drzewa
{
wezel = new KlasaDrzewo;//utworz nowy wezel
pop->wskp=wezel;//daj na niego wskaznik z poprzednika
wezel->pop=pop;//daj wskaznik z niego do poprzednika
wezel->wartosc=wartosc;//wstaw wartosc
wezel->index=index;
wezel->wskl=NULL; wezel->wskp=NULL;//ustaw wskazniki na synow
wezel->ilosc=1;
}
}
}//while tmp<>0
}//buduj
void KlasaDrzewo::preorder(KlasaDrzewo *wezel, TDana &zmienna, lgi &ile)
//wypisywanie drzewa w kolejności preorder
{
KlasaDrzewo *tmp = new KlasaDrzewo;
tmp=wezel;
if (tmp->wskl!=NULL)//idz do lewego syna
preorder(tmp->wskl,zmienna,ile);
if(ile<tmp->ilosc)
zmienna = tmp->wartosc;
if (tmp->wskp!=NULL)//idz do prawego syna
preorder(tmp->wskp,zmienna,ile);
}//preorder
KlasaDrzewo *inicjalizuj_korzen(KlasaDrzewo *wezel)
//ustaw korzen
{
wezel->wartosc="";
wezel->pop=NULL;
wezel->wskl=NULL; wezel->wskp=NULL;
wezel->index=0;
wezel->ilosc = 1;
return wezel;
}//inicjalizuj_korzen
void stop()
{
cout <<"Nacisnij dowolny klawisz, aby kontynuowac...\n";
getchar();
}
Kod: Zaznacz cały
while (true)
{
strum >>w;
if(strum.eof()){break;}
korzen->index++;
korzen->buduj(w, korzen, korzen->index);
}//while
Segmentation fault (core dumped)
prosze o pomoc.
- Undre
- Użytkownik
- Posty: 1430
- Rejestracja: 15 lis 2004, o 02:05
- Płeć: Mężczyzna
- Lokalizacja: UĆ
- Podziękował: 3 razy
- Pomógł: 92 razy
[c++] czym przystopować program w linuxie
A sprawdzalas recznie czy metody tej klasy nie generuja jakichs bledow ? Segmentation fault pojawia sie bodajze przy blednym odnoszeniu sie do pamieci ( typu wyjechanie poza tablice indeksem )