Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Bulider6, C++] Nie działa funkcja 'getch'

Ostatnio zmodyfikowano 2008-01-28 20:28
Autor Wiadomość
Pito
Temat założony przez niniejszego użytkownika
[Bulider6, C++] Nie działa funkcja 'getch'
» 2008-01-27 17:33:18
Nie działa mi komenda getch(); w bulider a bibliotekę conio.h zamieściłem.
Program się kompiluje ale po dotarciu do tej komendy przestaje reagować na cokolwiek.
Czy ktoś się spotkał z takim problemem i wie może jak temu zaradzić??
a oto kod przy którym się zacina.
C/C++
#include "winbgim.h"
#include <vcl.h>
#pragma hdrstop
#include <cstdlib>
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
void frys();


int k = 10, p, t;
double x, a, b;
double wyn;
double tab[ 1000 ];

main()
{
    int Sterownik, Tryb;
    Sterownik = DETECT;
    initgraph( & Sterownik, & Tryb, "" );
    closegraph();
   
   
    //--------------------------------------------------------------------------------------------------------------------
   
    cout << "Program tablicowania i rysowania funkcji f(x) w przedziale <a,b> dla\nzadanej liczby kroków n: " << endl;
    cout << "Program zostal napisany Przez Adama Białachowskiego" << endl;
   
    char znak;
   
    znak = getch(); // <= jak tego niema to działa
   
    while( znak != 27 )
    {
       
       
       
       
       
       
       
       
        cout << "podaj przedzial<a,b>" << endl;
       
        do
        {
            gotoxy( 3, 5 );
            clreol(); //czysci linie
           
            for( int i = 0; i < 10; ++i )
            {
                gotoxy( 6 + i, 5 );
                cout << "-";
                gotoxy( 6 + i, 7 );
                cout << "-";
                pp:
                gotoxy( 6, 6 );
                cout << "a = ";
               
            }
            cin >> a;
            if( a > 999 )
            {
                gotoxy( 6, 6 );
                clreol();
                gotoxy( 6, 8 );
                cout << "A może miec maksymalnie 3 cyfry";
                goto pp;
            }
           
            clreol();
            for( int i = 0; i < 10; ++i )
            {
                gotoxy( 6 + i, 5 );
                cout << "-";
                gotoxy( 6 + i, 7 );
                cout << "-";
                zz:
                gotoxy( 6, 6 );
                cout << "b = ";
            }
            clreol();
            cin >> b;
           
            if( b > 999 )
            {
                gotoxy( 6, 6 );
                clreol();
                gotoxy( 6, 8 );
                cout << "A może miec maksymalnie 3 cyfry";
                goto zz;
            }
            gotoxy( 6, 8 );
            clreol();
           
            if( !cin )
            {
                cin.clear();
                cin.ignore( 225,( int ) '\n' );
            }
        }
        while( a == NULL );
       
        gotoxy( 1, 4 );
        clreol();
        gotoxy( 1, 5 );
        clreol();
        gotoxy( 1, 6 );
        clreol();
        gotoxy( 1, 7 );
        clreol();
       
       
        gotoxy( 3, 5 );
        cout << "tablica wyników dla przedziału liczb od " << a << " do " << b << endl << endl << endl;
       
       
       
        x = a;
        t = b - a;
        int n = 0;
        for( double i = a; i < b; i++, x++, p++, n++ )
        {
           
            wyn = 1 - pow( k, 2 ) * pow( sin( x ), 2 );
            tab[ p ] = wyn;
            cout << n << ".  " << wyn << endl;
           
           
        }
       
       
       
       
        frys();
    }
}

//-----------------------------------------------------------------------------------------------------------------






void frys()
{
   
   
    /*układ*/
   
    initwindow( 600, 600 );
    line( 300, 0, 300, 600 );
    line( 0, 300, 600, 300 );
   
    /*skalowanie*/
   
    int k1 = 0,
    k2 = 0;
    for( int i = 0; i < 60; i++, k1 = k1 + 10, k2 = k2 + 10 )
    {
        line( 298, k1, 302, k2 );
        line( k1, 298, k2, 302 );
    }
   
   
    /*rysowanie*/
   
    int n = 100;
    moveto( 300, 300 );
    for( int i = 0; i < n; i++ )
    {
        if( tab[ i ] != NULL )
        {
           
            //lineto(300+(tab[i]*10),300+i*10);
            putpixel( 300 +( tab[ i ] * 10 ), 300 -( tab[ i ] * 10 ), 4 );
        }
    }
   
   
    while( !kbhit() );
   
    closegraph();
}
P-219
DejaVu
Błąd w kodzie
» 2008-01-27 18:45:04
W programie masz taki zapis:
C/C++
char znak;
znak = getch();
while( znak != 27 )
{
    //... tu jakiś kod
}
w wyniku czego program się pętli w nieskończoność.

/edit:
aby się przekonać, że getch() działa napisz:
C/C++
char znak;
cout << "Czekam na klawisz... ";
znak = getch();
cout << "klawisz nacisniety!" << endl;
while( znak != 27 )
{
    //... tu jakiś kod
}
/edit #2:
zapis:
znak = getch();
 musisz umieścić wewnątrz pętli, jednak nie wiem w którym miejscu, ponieważ nie analizowałem kodu i pewnie Ty będziesz wiedział lepiej gdzie to już wstawić.
P-220
Pito
Temat założony przez niniejszego użytkownika
» 2008-01-28 10:10:03
Nie działa napis Przycisk wciśnięty nie wyświetla się
ale jak napisze nowy program to działa:\
P-222
DejaVu
» 2008-01-28 11:10:26
Podany przykład nie może nie działać chyba, że masz biblioteki w swoim środowisku niesprawne (conio.h).
P-223
Pito
Temat założony przez niniejszego użytkownika
» 2008-01-28 16:50:14
Już wiem co jest problemem:)
Po prostu w bibliotece winbgim jest komenda getch tak powiedziała wykładowczyni z podstaw programowania i teraz korzystam z komendy geche() która równiesz znajduje się w conio.h i działa.
A jak by kto pytał to programy mi nie zaliczyła bo chce żeby tablice wyświetlało w graficznym trybie:/
jak ktoś zna dobry opis winbgim to bardzo bym prosił o linka(chodzi mi o kurs a nie tylko specyfikacje)
P-224
DejaVu
winbgim.h
» 2008-01-28 20:28:55
[tutorial]
C/C++
#include "winbgim.h"
Na stronie http://4programmers.net/C/FAQ/WinBgim napisane jest:
[tutorial]

WinBgim

Jest to biblioteka dla Windows stworzona na podstawie Borlandowskiego graphics.h. Zawiera ona wszystkie funkcje, które były dostępne w starej bibliotece oraz zawiera nowe, specjalnie przygotowane funkcje dla Windows. Oferuje ona również funkcje do obsługi myszy - stąd wzięła się nazwa: WINdows borland BGI graphics and Mouse.[/tutorial]
Mówiąc prościej: jeśli szukasz kursu do winbgim.h, poszukaj kursu graphics.h, ponieważ funkcje w winbgim.h są wzorowane na graphics.h.
[/tutorial]
P-225
« 1 »
  Strona 1 z 1