C++ pitanje

poruka: 13
|
čitano: 2.316
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
neaktivan
offline
C++ 2 pitanja

1.kako pretvorit float u char a da se ne koristi sprintf?

2.

On Error GoTo negdje

 

i

 

On Error Resume Next

 

ovo je kod iz vb-a, kako bi to išlo u c++?

 

 

Moj PC  
0 0 hvala 0
16 godina
neaktivan
offline
RE: C++ 2 pitanja

1. odgovor je type casting.

2. probaj s try-throw-catch blokom

S štovanjem, brahle!
16 godina
neaktivan
offline
C++ pitanje

npr float a;

static_cast<char>(a);

 
0 0 hvala 0
17 godina
offline
C++ pitanje

Za 1., možda si mislio u char* ?

 

Ja bih to ovako napravio:

 

#include <sstream>

 

/* ... */

 

 float val = 4.4452f;
 stringstream tok;
 tok << val;
 const char* rezultat = tok.str().c_str();

 
0 0 hvala 0
17 godina
neaktivan
offline
C++ pitanje

1. pitanje rješeno

 

a ima netko neki dobar primjer za try--catch?

 

znam da se u try stavlja kod, a catch se izvršava kad se dogodi exception? ili?

 

 

 

 

 

Moj PC  
0 0 hvala 0
16 godina
neaktivan
offline
RE: C++ pitanje

Evo pa malo prouči :

 

 

#include<iostream>
using namespace std;
int main()
{
    
   int visina =0;
   double metri = 1.0;
   char znak = 'y';
   try
   {
       while(znak =='y' || znak =='Y')
       {
           cout<<"Unesi visinu : "<<endl;
       cin>>visina;
       try{
           if(visina>190)
               throw"Visina je dosegla svoj maximum!";
           if(visina<20)
               throw visina;
           cout<<visina<<"  metara"<<endl;
       }
       catch(const char Poruka[])
       {
           cout<<Poruka<<endl;
       }
       cout<<"Ako ces nastaviti (y ili n)?";
       cin>>znak;
   }
   }
   catch(int greska)
   {
       cout<<greska<<"Ispod minimuma!"<<endl;
   }
   return 0;
}

Private
17 godina
offline
C++ pitanje

           if(visina>190)
               throw"Visina je dosegla svoj maximum!";
           if(visina<20)
               throw visina;

 

Zašto "bacati" visinu?

 

I kad to već radiš, zašto nisi napravio catch-blok za to?

 
0 0 hvala 0
16 godina
neaktivan
offline
RE: C++ pitanje

Radi se o "nested try block" gdje unutrašnji try ne slijedi svoj catch.

 

 

Private
Poruka je uređivana zadnji put sri 18.2.2009 21:36 (Private).
17 godina
offline
C++ pitanje

Da, ali koji je smisao toga?

 

Jako zbunjujuć primjer, pogotovo ako nekome pokušavaš objasniti kako rade iznimke.

 
0 0 hvala 0
17 godina
neaktivan
offline
C++ pitanje

hvala na primjeru

 

nadao sam se da ce bit u 2 reda koda ko u basicu Smijeh al sad vidim da ima dosta posla oko tog.

 

 

btw. radi se o dll-u koji pokrene thread u kojem se izvršava while petlja. i sad neznam zbog cega nekad se dogodi exception i ode sve kvragu Smijeh. jel ima kakve razlike ili bi ovo sa try trebalo radit?

Moj PC  
0 0 hvala 0
16 godina
neaktivan
offline
RE: C++ pitanje
nadimak888 kaže...

}hvala na primjeru

 

nadao sam se da ce bit u 2 reda koda ko u basicu Smijeh al sad vidim da ima dosta posla oko tog.

 

 

btw. radi se o dll-u koji pokrene thread u kojem se izvršava while petlja. i sad neznam zbog cega nekad se dogodi exception i ode sve kvragu Smijeh. jel ima kakve razlike ili bi ovo sa try trebalo radit?

 Evo jednostavniji primjer:

#include<iostream>
using namespace std;
int main()
{

    int brojevi[] = {23,45,60,59,0,0,1,0};
    int djeljitelj = 1;
    for(int x = 0;x < sizeof brojevi/sizeof brojevi[0];x++)
        try
    {
        cout<<endl
        <<"   " <<x+1;
        if(brojevi[x] ==0)
            throw"   ...Nula -nemoguce izracunati...";
        cout<<"  izracun : "
            <<brojevi[x];
    }
    catch(const char poruka[])
    {
        cout<<poruka<<endl;
    }
    return 0;
}

Private
17 godina
protjeran
offline
RE: C++ pitanje
Private kaže...

Radi se o "nested try block" gdje unutrašnji try ne slijedi svoj catch.

 

 

 nested try blok se originalno koristi za prosljeđivanje iznimki i nije uopće potreban u ovom slučaju, a pogotovo to nije nešto što se stavlja kao prvi primjer početniku. Evo nečeg jednostavnijeg:

    float a, b, c;

    cout << "Unesite dva broja: ";
    cin >> a >> b;
    try {
        if(b == 0)
            throw "b je jednak nuli!";
        c = a / b;
        cout << "kvocijent = " << c;
    }
    catch(char* Iznimka){
        cout << "Iznimka: " << Iznimka;
    }

dok, evo primjer za ugnježđeni try-catch:

char* s;
int n = 10;

try {
    try  {
        s = new char[n];
        if(s == NULL)
            throw "Dinamička alokacija ";
    }
    catch(char* Iznimka){
        cout << "Greška: ";
        throw; // proslijedi iznimku
    }
}
catch(char* Iznimka){
    cout << Iznimka << "nije uspjela!";
}
//...
    delete[] s;

a osim ovoga postoji i SEH (structured exception handling) koji je mnogo bolji i detaljniji:
(primjer iz jednog zadatka postavljenog na ovom forumu)

#include <iostream>
#include <windows.h>
using namespace std;

int n = 0;

void f(){
    n++;
    f();
}
int main(int argc, char* argv[])
{
    __try{
         f();
    }
    __except(GetExceptionCode() == EXCEPTION_STACK_OVERFLOW
    ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
    {
        cout << n;
    }
    cin.get();
    return 0;
}

Ukratko, rad s iznimkama zna biti jako kompliciran, a pogotovo ako programer ne vodi računa o neprihvaćenim iznimkama, koristi iznimke koje su definirane van listi iznimki, a da pritom ne definira sve pokazivače na funkcije koje bi se izvršavale u takvim kritičnim situacijama.

nadimak888 kaže...

hvala na primjeru

 

nadao sam se da ce bit u 2 reda koda ko u basicu Smijeh al sad vidim da ima dosta posla oko tog.

 

 

btw. radi se o dll-u koji pokrene thread u kojem se izvršava while petlja. i sad neznam zbog cega nekad se dogodi exception i ode sve kvragu Smijeh. jel ima kakve razlike ili bi ovo sa try trebalo radit?

 

 

 

Ako je riječ o grešci koja se događa u dll-u teško da ćeš ju moći obraditi u svom programu. Ta obrada se treba nalaziti u samom dll-u. To je isto kao da u svom programu pokušavaš doznati zašto se srušio neki drugi program.

Poruka je uređivana zadnji put sri 18.2.2009 22:34 (Tracer).
17 godina
neaktivan
offline
C++ pitanje

ja radim taj dll, tak da nije problem trazit gresku.

aj fala ti na ovolko objašnjenju, nesto cu izmislit.

Moj PC  
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice