Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

Tomczykolacz

Error 1 error C4996: 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch.

Polecane posty

Ech jak ja nie znoszę C++! Mam doz robienia zadanie rysujące figurę na ekranie. Dostałem inny kod, który rysuje prostokąt abym na nim ćwiczył. Mam przerobić poniższy kod, tak by rysował inna figurę. Nie mogę jednak nawet go skompilować, bo wyskakuje błąd, którego nazwę podałem w tytule wątku. Używam kompilatora MS Visual Studio 2013. Oto kod:


#include <iostream>
#include <conio.h>
#include <Windows.h>
using namespace std;
void gotoxy(int x, int y);
int wherex();
int wherey();
void clreol();
void HideCursor();
/*-------------------------------------------------------------------*/
const int Esq = 27;
int main()
{
int x, y, x1, y1, bok;
char klawisz;
x = 38; y = 10; bok = 5;
do
{
system("cls");
x1 = x; y1 = y;
gotoxy(x1, y1);
for (int i = 1; i <= bok; i++) // gorna krawedz
cout << '*';
for (int i = 1; i <= bok - 2; i++) // boki
{
y1++;
gotoxy(x1, y1);
cout << '*';
x1 = x + bok - 1;
gotoxy(x1, y1);
cout << '*';
x1 = x;
}
y1++;
gotoxy(x1, y1);
for (int i = 1; i <= bok; i++) // dolna krawedz
cout << '*';
HideCursor();
klawisz = getch();
switch (klawisz)
{
case '+': { bok = bok + 2; // powiekszenie
x--; y--;
break; }
case '-': { bok = bok - 2; // zmniejszenie
x++; y++;
break; }
case 'l': { x--; break; } // przesuniecie w lewo
case 'p': { x++; break; } // przesuniecie w prawo
case 'g': { y--; break; } // przesuniecie do gory
case 'd': { y++; break; } // przesuniecie do dolu
case Esq: { break; } // wyjscie
}
} while (klawisz != Esq);
return 0;
}
//----------------------------------------------------------------------------
void gotoxy(int x, int y)
{
COORD c;
c.X = x;
c.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
}
//----------------------------------------------------------------------------
int wherex()
{
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
return csbi.dwCursorPosition.X;
}
//----------------------------------------------------------------------------
int wherey()
{
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
return csbi.dwCursorPosition.Y;
}
//----------------------------------------------------------------------------
void HideCursor()
{
::HANDLE hConsoleOut = ::GetStdHandle(STD_OUTPUT_HANDLE);
::CONSOLE_CURSOR_INFO hCCI;
::GetConsoleCursorInfo(hConsoleOut, &hCCI);
hCCI.bVisible = FALSE;
::SetConsoleCursorInfo(hConsoleOut, &hCCI);
}
//----------------------------------------------------------------------------
void clreol()
{
int x, y;
x = wherex();
y = wherey();
gotoxy(x, y);
for (int i = x; i <= 79; i++)
cout << " ";
gotoxy(x, y);
}

Link do komentarza
Udostępnij na innych stronach

Wywal getch i conio.h, zastąp je użyciem cin. Poza tym zamiast system("cls") lepiej napisać własną funkcję czyszczącą ekran (skoro już masz funkcje używające winapi, to dodanie kolejnej nie będzie problemem, a kiedyś znalazłem w internecie implementację).

Link do komentarza
Udostępnij na innych stronach

Działało, tylko [Enter] trzeba wcisnąć. Jeśli upierasz się przy użyciu getch, to jak byk tam pisze, że to jest _getch()(jak zaczynałem studia ponad trzy lata temu to też tak było). Wybacz ale czytanie ze zrozumieniem.

Tak sobie przeglądałem i można też coś własnego typowo pod Windowsa napisać:

http://pastebin.com/r6PjW8ps

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...