biblioteka conio.h - jak zastąpić?

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
Wojtol
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 30 sty 2007, 20:56
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

biblioteka conio.h - jak zastąpić?

Post autor: Wojtol »

Witam ;) Ucze się programować.. Korzystam z tego kursu: http://kursy.ddt.pl Pojawia sie problem z bibliteką conio.h.. Zainstalowałem libconio i ncurses.. zamiast

Kod: Zaznacz cały

getch()
używam

Kod: Zaznacz cały

cin.get()
usunąłem z kodu programu linijkę

Kod: Zaznacz cały

#include <conio.h>
jednak gcc wysypuje błędy.. 'Oto treść calego kodu:

Kod: Zaznacz cały

#include <iostream>
#include <conio.h>

int main()
{
  using namespace std;
  /*Deklaracja zmiennej typu "int" (liczby całkowite)
o nazwie "zmienna_liczba" */
  int zmienna_liczba;

  /*Deklaracja zmiennej typu "int" bez znaku
(czyli bez znaku minusa (liczby większe lub równe 0))
o nazwie "dodatnie"*/
  unsigned int dodatnie;

  /*Deklaracja zmiennej typu "float" (liczby zmienno przecinkowej)
o nazwie "zmiennoprzecinkowa";*/
  float zmiennoprzecinkowa;

  //deklaracja zniennej znakowej typu "char" o nazwie "jeden_znak"
  char jeden_znak;

  /*deklaracja zniennej znakowej typu "char" bez znaku minus
(to będzie wymagało szerszego wyjaśnienia)*/
  unsigned char znak;

  //Deklaracja zmiennej "abc" i przypisanie jej wartości początkowej równej -53;
  int abc = -53;
  //Przypisanie wartości 22 do zmiennej o nazwie "dodatnie";
  dodatnie = 22;
  //Przypisanie wartości 12.42 do zmiennej o nazwie "zmiennoprzecinkowa";
  zmiennoprzecinkowa = 12.42;
  /*Przypisanie do zmiennej o nazwie "znak" wartości 'c'
(to również będzie wymagało szerszego wyjaśnienia)*/
  znak = 'c';

  //wyświetlenie wszystkich zmiennych na ekranie
  cout << "wypisujemy zmienne:" << endl
  <<"  zmienna_liczbowa: " << zmienna_liczba
  << endl
  <<"  dodatnie: " << dodatnie << endl
  <<"  abc: " << abc << endl
  <<"  zmiennoprzecinkowa: " << zmiennoprzecinkowa
  << endl
  <<"  jeden_znak: " << jeden_znak << endl
  <<"  znak: " << znak << endl;

  getch();//Czekaj na dowolny znak z klawiatury
  return(0);
}
Co z tego kodu potrzebuje biblioteki conio.h, że gdy usuwam "#include <conio.h>" z kodu to wyrzuca błędy?
treść błędu:

Kod: Zaznacz cały

wojtek@wojtek-desktop:~/Pulpit$ gcc xxx.cpp -o xxx
/tmp/cc2zufA3.o: In function `__static_initialization_and_destruction_0(int, int)':
xxx.cpp:(.text+0x1d): undefined reference to `std::ios_base::Init::Init()'
xxx.cpp:(.text+0x22): undefined reference to `std::ios_base::Init::~Init()'
/tmp/cc2zufA3.o: In function `main':
xxx.cpp:(.text+0x9c): undefined reference to `std::cout'
xxx.cpp:(.text+0xa1): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
xxx.cpp:(.text+0xa9): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
xxx.cpp:(.text+0xb1): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
xxx.cpp:(.text+0xc1): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
xxx.cpp:(.text+0xd2): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(int)'
xxx.cpp:(.text+0xda): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
xxx.cpp:(.text+0xe2): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
xxx.cpp:(.text+0xf2): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
xxx.cpp:(.text+0x103): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(unsigned int)'
xxx.cpp:(.text+0x10b): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
xxx.cpp:(.text+0x113): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
xxx.cpp:(.text+0x123): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
xxx.cpp:(.text+0x134): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(int)'
xxx.cpp:(.text+0x13c): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
xxx.cpp:(.text+0x144): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
xxx.cpp:(.text+0x154): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
xxx.cpp:(.text+0x165): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(float)'
xxx.cpp:(.text+0x16d): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
xxx.cpp:(.text+0x175): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
xxx.cpp:(.text+0x185): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
xxx.cpp:(.text+0x191): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char)'
xxx.cpp:(.text+0x199): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
xxx.cpp:(.text+0x1a1): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
xxx.cpp:(.text+0x1b1): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
xxx.cpp:(.text+0x1bd): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, unsigned char)'
xxx.cpp:(.text+0x1c5): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
xxx.cpp:(.text+0x1cd): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
xxx.cpp:(.text+0x1d4): undefined reference to `std::cin'
xxx.cpp:(.text+0x1d9): undefined reference to `std::basic_istream<char, std::char_traits<char> >::get()'
/tmp/cc2zufA3.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
//ka_o_3991: poprawiam temat za Ciebie, ale to kosztuje ostrzeżenie. ileż można prosić...
norvoles
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1113
Rejestracja: 04 sty 2008, 20:58
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64

Odp: Problem z brakiem biblioteki conio.h

Post autor: norvoles »

Z tego co wiem, nie ma na Linuksie conio.h
A poza tym to wygląda jak c++ zatem lepiej będzie użyć g++ do kompilacji :P
skoczo
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 176
Rejestracja: 09 kwie 2008, 11:40
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Problem z brakiem biblioteki conio.h

Post autor: skoczo »

getch() zamień na getchar() i #include <conio.h> na #include <cstdio> i tak jak w poprzednim poście kompiluj g++
dawidgarus
Wytworny Kaczor
Wytworny Kaczor
Posty: 418
Rejestracja: 09 lut 2007, 23:17
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Problem z brakiem biblioteki conio.h

Post autor: dawidgarus »

getch != getchar
oto implementacja conio.h dla linuksa:
sourceforge.net/projects/linux-conioh/
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: Problem z brakiem biblioteki conio.h

Post autor: beluosus »

Było na forum nie raz. Widać, że szukanie boli. Wracając do problemu, w tym wypadku użycie getch() jest niemal bezcelowe i można zamienić na cin lub "przerzucić" program na ncurses. Dodam jeszcze, że do jeden_znak i zmienna_liczba w trakcie programu nie są przypisane żadne wartości - co za tym idzie, zostaną wyświetlone głupoty. ;) Poza tym problemem nie jest sam getch() tylko jak wspomniał użytkownik norvoles kompilacja przez gcc, a nie g++.

@dawidgarus: nie używałem conio dla Linuksa, ale z tego co widzę to Twój link zawiera suchara. Na dodatek w wersji beta.
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
siano89
Piegowaty Guziec
Piegowaty Guziec
Posty: 1
Rejestracja: 19 kwie 2010, 09:53
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: Problem z brakiem biblioteki conio.h

Post autor: siano89 »

ściągnij sobie bibliotekę conio.h i zainstaluj i nie powinno być problemów.
Awatar użytkownika
ka_o_3991
Przyjaciel
Przyjaciel
Posty: 864
Rejestracja: 01 wrz 2007, 13:34
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86_64

Odp: Problem z brakiem biblioteki conio.h

Post autor: ka_o_3991 »

siano89, bzdury opowiadasz. Generalnie jak już koledzy wyżej powiedzieli conio.h nie ma na Linuksa, poza tą podlinkowaną wyżej nieoficjalną betą.
Awatar użytkownika
kamilsilver
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 105
Rejestracja: 06 lis 2008, 21:53
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: KDE Plasma
Architektura: x86

Odp: Problem z brakiem biblioteki conio.h

Post autor: kamilsilver »

Ogólnie masz fajny błąd w kodzie:

Kod: Zaznacz cały

using namespace std; 
to piszesz przed mainem nie w nim. Przez to tak dużo błędów std::cout, std::cin.

Kiedyś szukałem rozwiązania jak zrobić getch() nie używając windowsowej biblioteki (bo na linuxie jej nie ma). Albo jej implementacja na linuxa (http://sourceforge.net/projects/linux-conioh/) lub:
Ostatnie posty wątków:
http://debian.linux.pl/threads/16081-Fu ... etch()-w-C
http://eglug.org/node/1818

Ogólnie polecam google ze słowami: linux getch() C C++ i Ncurses


Z ncursem:

Kod: Zaznacz cały

#include <curses.h>
#include <iostream.h>

main(){
unsigned int key;

key = getch();
cout << "Klawisz: " << key << endl; 
}
I przy kompilacji dorzucasz atrybut -lncurses
Temat rozwiązany? Dodaj [solved] w tytule tematu :)
Inny OS => Debian Squeeze (testing)
Awatar użytkownika
Wojtol
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 30 sty 2007, 20:56
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

Odp: Problem z brakiem biblioteki conio.h

Post autor: Wojtol »

już czaje baze ;) dzięki! ;)
Zablokowany

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 11 gości