Sterowanie silnikiem krokowym - problem z wywołaniem funkcji w BCB6 dla DOSa

2015-01-31 17:55
0

Witam wszystkich serdecznie z racji tego że jest to mój pierwszy post.

Moim zadaniem jest napisanie programu sterującego silnikiem krokowym przez port szeregowy.
Po usunięciu pierwszych problemów związanych z innym nazewnictwem bibliotek(pisałem w Code::Blocks - nie trawie Borlanda...) program skompilować się w Borlandzie dla DOSu.

Problem którego nie udało mi się jednak przeskoczyć leży w wywoływaniu funkcji

void main()
   {
       string kierunek;
       cout<<"Podaj predkosc :";
       cin>>SPEED;
       cout<<"Podaj kierunek obrotu(L-lewo,R-prawo):";     //kierunek obrotu
       cin>>kierunek;

       while(1)            //petla wykonujaca sie az na wejsciu nie bedzie lewo albo prawo
       {

           if (kierunek=='L')
            {
                lewo();
                break;
            }
           else if (kierunek=='P')
            {
                prawo();
                break;
            }
           else
            {
               cout<<"Wybrales zly kierunek.Sprobuj jeszcze raz:";
               cin>>kierunek;
            }
       }
   }

Gdy już wybiore poprawny kierunek program po prostu się zamyka. Kod funkcji wygląda tak:


void lewo()
{
    double czas;
    cout<<"podaj czas obrotu w sekundach:";
    cin>>czas;
    ...
}

Na początku funkcje były int'ami a nie void'ami więc pomyślałem, że może Borland tego typu funkcji jakimś cudem nie obsługuje(mimo że bezbłędnie skompilował). O zamykanie programu oczywiście oskarżam "break'a" inaczej program by w kółko pytał o kierunek. Opcja że funkcja wywoływana wykonuje się jakoś bardzo szybko też jest niemożliwa bo program zamyka się przed wprowadzeniem czasu. I tutaj nie mam pomysłu co dalej. Macie może jakieś pomysły ?

Pozostało 580 znaków

2015-01-31 23:51
0

Na początku funkcje były int'ami a nie void'ami więc pomyślałem, że może Borland tego typu funkcji jakimś cudem nie obsługuje(mimo że bezbłędnie skompilował).

Jakieś brednie wypisujesz... Kompilator poprawnie rozpozna każdą poprawnie zapisaną funkcję i poprawnie wygeneruje plik wykonywalny; Gdyby kompilator Borlanda tak podstawowej rzeczy nie umiał zrobić, to byłby bezużyteczny;

Gdy już wybiore poprawny kierunek program po prostu się zamyka.

Program robi dokładnie to, co mu każesz - po podaniu literki P lub L wywołuje odpowiednią funkcję i breakiem przerywa pętlę; A że po pętli nie ma żadnego kodu, to program zostaje zamknięty;

O zamykanie programu oczywiście oskarżam "break'a" inaczej program by w kółko pytał o kierunek.

Nie - w kółko wykonywałby akcję dla wartości zapisanej w zmiennej kierunek; Chyba że ta zmienna przechowywać będzie wartość inną niż literka L i P, to wtedy wyświetliłby komunikat i poprosił o ponowne podanie wartości;

I tutaj nie mam pomysłu co dalej. Macie może jakieś pomysły ?

Przede wszystkim sensownie opisz to, czego od tego programu oczekujesz - jak ma wyglądać i jak ma działać; Wtedy będzie można coś doradzić; A Ty opisałeś jedynie jak działa teraz, a nie co ma wykonywać.


Pozostało 580 znaków

2015-02-01 00:13
0

Program robi dokładnie to, co mu każesz - po podaniu literki P lub L wywołuje odpowiednią funkcję i breakiem przerywa pętlę;

Zgadza się ,ale nie do końca i właśnie tu jest problem. Teoretycznie program powinien wywołać funkcje lewo() i wykonać zawarty w niej kod a to sie nie dzieje. Program od razu się zamyka tak jakby omijał linijkę wywołującą funkcję i od razu breakiem kończył pętle a przy tym cały program.

Pozostało 580 znaków

2015-02-01 00:44
0

Użyłeś debuggera i faktcznie ten kod nie jest wykonywany?

Sprawdziłem po swojemu (kulawo mi idzie C++, bo dawno w nim nie pisałem) i jakoś działa - http://ideone.com/T4UjId
Dla kilku błędnych literek też działa prawidłowo - http://ideone.com/RchimT

Tyle że ja użyłem typu char dla zmiennej direction, a Ty korzystasz z całego łańcucha (i bezpieczniej); Jednak do porównania z literałem muszę użyć cudzysłowów, a nie apostrofów - http://ideone.com/AOOIMr - inaczej ideone zgłasza błąd kompilacji o nieznanym operatorze;

Ja nie pamiętam zbyt dobrze C++, ale spróbuj użyć cudzysłowów, bo jak widać ma to kluczowe znaczenie (przynajmniej dla kompilatora na wymienionej stronie); Albo poczekaj nieco dłużej, aż ktoś ogarniający ten język udzieli Ci odpowiedzi.


edytowany 2x, ostatnio: furious programming, 2015-02-01 00:45

Pozostało 580 znaków

2015-02-01 02:04
0

Nie ma czegoś takiego jak BCB6 dla DOS-a.
Ostatnia DOS-owa wersja to była bodajże Borland C++ 3.1.

Co masz więc na myśli pisząc "Borland"?

Zapewne chodzi mu o konsolę. Dla wielu program konsolowy to program DOS-owy, bo przecież ma to charakterystyczne czarne okienko z tekstem. - _0x666_ 2015-02-01 09:22

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0