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

[C++] Problem z switch

Ostatnio zmodyfikowano 2013-10-23 11:42
Autor Wiadomość
Midas
Temat założony przez niniejszego użytkownika
[C++] Problem z switch
» 2013-10-22 00:10:08
Kod
C/C++
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <Windows.h>
#include "Konsola_1.cpp"
#include <locale>

using namespace std;

void polskie_litery()
{
    locale locpl( "Polish_Poland" );
    locale::global( locpl );
    cout.imbue( locpl );
    cin.imbue( locpl );
}

int rysowanie()
{
    char klawisz;
    char znak;
    int x, y, x1, y1, bok;
    x = 10;
    y = 10;
    bok = 0;
    cout << "Podaj n" << endl;
    cin >> bok;
    cout << "Podaj znak ascii" << endl;
    cin >> znak;
   
    HideCursor();
    do
    {
       
        system( "cls" );
        x1 = x; y1 = y;
        gotoxy( x1, y1 );
        for( int i = 1; i <= bok; i++ ) // górna krawedz
             cout << znak;
       
        for( int i = 1; i <= bok; i++ ) // przękątna
        {
            gotoxy( x1++, y1++ );
            cout << znak;
        }
        for( int i = 1; i <= bok; i++ ) // dolna krawedz
        {
            x1 = x++;
            y1 = y + bok - 1;
            gotoxy( x1, y1 );
            cout << znak;
        }
       
        klawisz = _getch();
       
        switch( klawisz )
       
        {
        case 'q': { bok = bok + 2; // powiekszenie
                x--; y--;
                break; }
        case 'e': { bok = bok - 2; // zmniejszenie
                x++; y++;
                break; }
        case 'a': { x--; break; } // przesuniecie w lewo
        case 'd': { x++; break; } // przesuniecie w prawo
        case 'w': { y--; break; } // przesuniecie do gory
        case 's': { y++; break; } // przesuniecie do dolu
            default:
            { break; } // wyjscie 
        }
       
    }
    while( klawisz != bok );
   
    return 0;
}

void nazwa()
{
    cout << "Naciśnij Enter" << endl;
    HideCursor();
    _getch();
    system( "cls" );
}

int main()
{
   
    polskie_litery();
    nazwa();
    rysowanie();
    HideCursor();
    _getch();
    return 0;
}

Konsola_1 ustawia kursor na osi współrzędnych x , y.

Nie wiem dlaczego, ale nie działa mi switch, program wczytuje każdą liczbę z klawiatury i wtedy przesuwa figure tylko w prawo. Poza tym powiększanie i pomniejszanie działa w ten sposób że figura powiększa się, ale ucieka w prawo.
Nie wiem co powoduje taki wynik.
P-94271
walus1305
» 2013-10-22 19:55:05
mi sie sypie na petli sprobuje poprawic

Poprawione Switch działa

C/C++
#include <iostream>
#include <conio.h>
#include <Windows.h>
#include <locale>
#include <stdlib.h>
using namespace std;

void polskie_litery()
{
    locale locpl( "Polish_Poland" );
    locale::global( locpl );
    cout.imbue( locpl );
    cin.imbue( locpl );
}

void gotoxy( int x, int y )
{
    COORD c;
    c.X = x;
    c.Y = y;
    SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), c );
}

void rysowanie( char & znak, int & bok )
{
   
    cout << "Podaj n" << endl;
    cin >> bok;
    cout << "Podaj znak ascii" << endl;
    cin >> znak;
}



int main()
{
    char klawisz;
    char znak;
    int x, y, x1, y1, bok;
    x = 10;
    y = 10;
    polskie_litery();
    rysowanie( znak, bok );
    do
    {
       
        system( "cls" );
        x1 = x; y1 = y;
        gotoxy( x1, y1 );
        for( int i = 1; i <= bok; i++ ) // górna krawedz
        {
            cout << znak;
        }
       
        for( int i = 1; i <= bok; i++ ) // przękątna
        {
            gotoxy( x1++, y1++ );
            cout << znak;
        }
        for( int i = 1; i <= bok; i++ ) // dolna krawedz
        {
            x1 = x;
            y1 = y + bok - 1;
            gotoxy( x1, y1 );
            cout << znak;
        }
       
       
        klawisz = getch();
       
        switch( klawisz )
       
        {
        case 'q': { bok = bok + 2; // powiekszenie
                x--; y--;
                break; }
        case 'e': { bok = bok - 2; // zmniejszenie
                x++; y++;
                break; }
        case 'a': { x--; break; } // przesuniecie w lewo
        case 'd': { x++; break; } // przesuniecie w prawo
        case 'w': { y--; break; } // przesuniecie do gory
        case 's': { y++; break; } // przesuniecie do dolu
        case 27: { break; }
        }
       
    }
    while( klawisz != 27 );
   
   
    return 0;
}
P-94335
Midas
Temat założony przez niniejszego użytkownika
» 2013-10-22 23:42:14
jeżeli ma rysować prawidłową figurę, to nie działa wtedy switch.
P-94367
walus1305
» 2013-10-22 23:43:48
jutro nad tym usiade tylko mi napisz jak ta figura ma wygladac
P-94368
Midas
Temat założony przez niniejszego użytkownika
» 2013-10-22 23:56:08
Powinno wyglądać tak.


C/C++
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <Windows.h>
#include <locale>
#include <stdlib.h>
using namespace std;

void polskie_litery()
{
    locale locpl( "Polish_Poland" );
    locale::global( locpl );
    cout.imbue( locpl );
    cin.imbue( locpl );
}

void gotoxy( int x, int y )
{
    COORD c;
    c.X = x;
    c.Y = y;
    SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), c );
}

void rysowanie( char & znak, int & bok )
{
   
    cout << "Podaj n" << endl;
    cin >> bok;
    cout << "Podaj znak ascii" << endl;
    cin >> znak;
}



int main()
{
    char klawisz;
    char znak;
    int x, y, x1, y1, bok;
    x = 10;
    y = 10;
    polskie_litery();
    rysowanie( znak, bok );
    do
    {
       
        system( "cls" );
        x1 = x; y1 = y;
        gotoxy( x1, y1 );
        for( int i = 1; i <= bok; i++ ) // górna krawedz
        {
            cout << znak;
        }
       
        for( int i = 1; i <= bok; i++ ) // przękątna
        {
            gotoxy( x1++, y1++ );
            cout << znak;
        }
       
        for( int i = 1; i <= bok; i++ ) // dolna krawedz
        {
            x1 = x++;
            y1 = y + bok - 1;
            gotoxy( x1, y1 );
            cout << znak;
        }
       
       
        klawisz = _getch();
       
       
    } while( klawisz != 27 );
   
   
    return 0;
}
P-94369
walus1305
» 2013-10-23 10:03:04
Napisane na szybko przy porannej kawie działa przesuwanie i powiększanie

C/C++
#include <iostream>
#include <conio.h>
#include <Windows.h>
#include <locale>
#include <stdlib.h>
using namespace std;

void polskie_litery()
{
    locale locpl( "Polish_Poland" );
    locale::global( locpl );
    cout.imbue( locpl );
    cin.imbue( locpl );
}

void gotoxy( int x, int y )
{
    COORD c;
    c.X = x;
    c.Y = y;
    SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), c );
}

void rysowanie( char & znak, int & bok )
{
   
    cout << "Podaj n" << endl;
    cin >> bok;
    cout << "Podaj znak ascii" << endl;
    cin >> znak;
}



int main()
{
    char klawisz;
    char znak;
    int x, y, x1, y1, bok, X, Y;
    x = 10;
    y = 10;
   
    X = 0;
    Y = 0;
    polskie_litery();
    rysowanie( znak, bok );
    do
    {
       
        system( "cls" );
        x1 = x; y1 = y;
        gotoxy( x1 + X, y1 + Y );
        for( int i = 1; i <= bok; i++ ) // górna krawedz
        {
            cout << znak;
        }
       
        for( int i = 1; i <= bok; i++ ) // przękątna
        {
           
            gotoxy(( x1++ ) + X,( y1++ ) + Y );
            cout << znak;
           
        }
       
        gotoxy( 10 + X,(( bok - 1 ) + 10 ) + Y );
        for( int i = 1; i <= bok; i++ ) // dolna krawędź
        {
            cout << znak;
        }
        klawisz = getch();
       
        switch( klawisz )
       
        {
        case 'q': { bok = bok + 2; // powiekszenie
               
                break; }
        case 'e': { bok = bok - 2; // zmniejszenie
               
                break; }
        case 'a': { X--; break; } // przesuniecie w lewo
        case 'd': { X++; break; } // przesuniecie w prawo
        case 'w': { Y--; break; } // przesuniecie do gory
        case 's': { Y++; break; } // przesuniecie do dolu
        case 27: { break; }
        }
       
    }
    while( klawisz != 27 );
   
   
    return 0;
}
P-94372
Midas
Temat założony przez niniejszego użytkownika
» 2013-10-23 11:42:58
Dzięki wielkie za pomoc ! Zamykam temat.
P-94377
« 1 »
  Strona 1 z 1