kategoria: C++
[#1] Zamiennik funkcji getch()
Jak w temacie. Jaki zamiennik zastosować dla brakującej w AmiDevCPP funkcji?

Jeszcze taki inny problemik co zrobić gdy linker wywala błąd:

[Linker Error] undefined reference to `_fdopen'


i inne po dołączeniu:

#include <fstream>


?
[#2] Re: Zamiennik funkcji getch()

@pong777, post #1

A co takiego robisz (a raczej czego nie robisz) że brakuje Ci getchar, który to zwyczajowo znajduje się w stdio.h.

Domyślam się, że projekt jest w C++, tylko dlaczego chcesz używać funkcji z C ?
[#3] Re: Zamiennik funkcji getch()

@asman, post #2

Tak, program jest w C++. Potrzebuje czegoś, co poczeka na naciśnięcie dowolnego klawisza.
[#4] Re: Zamiennik funkcji getch()

@pong777, post #3

i takie coś nie działa u Ciebie ?

#include <stdio.h>

int main(void)
{
int c = getchar();
return 0;
}
[#5] Re: Zamiennik funkcji getch()

@asman, post #4

#include <time.h>
#include <conio.h>
#include <iostream>
#include <fstream>
using namespace std;

int main(int argc,char **argv)
 {
  if (argc<3)           
  {
   cout << "\n[ERROR] Too few parameters.";
   cout << "\nUsage: disktest.exe [file_name] [file_size_in_bytes]";
   cout << "\nExample: disktest.exe RAM:testfile.bin 1048576";
   
   getch();
   return 0;
  }
  long s = atol(argv[2]) / 512;           
  time_t sekund1;
  time_t sekund2;
  int i;
  std::ofstream outfile (argv[1]);

  sekund1 = time( NULL );

  for (i=0;i<s;i++)
  {
   outfile << "MX432178redfcs653453esew3gkfcoxz235gtfd76zxsadfrr3234hyptjYT432azMX432178redfcs653453esew3gkfcoxz235gtfd76zxsadfrr3234hyptjYT432azMX432178redfcs653453esew3gkfcoxz235gtfd76zxsadfrr3234hyptjYT432azMX432178redfcs653453esew3gkfcoxz235gtfd76zxsadfrr3234hyptjYT432azMX432178redfcs653453esew3gkfcoxz235gtfd76zxsadfrr3234hyptjYT432azMX432178redfcs653453esew3gkfcoxz235gtfd76zxsadfrr3234hyptjYT432azMX432178redfcs653453esew3gkfcoxz235gtfd76zxsadfrr3234hyptjYT432azMX432178redfcs653453esew3gkfcoxz235gtfd76zxsadfrr3234hyptjYT432az"; 
  }
    
    
  outfile.flush();
  outfile.close();

  sekund2 = time( NULL );
  cout << "\n\nWritten " << s*512 <<  " bytes on " << argv[1]<< " in " << sekund2-sekund1 << " seconds.";
  
  getch();
  return 0;
}


To tester szybkości zapisu do pliku. Pod DevCPP 5 działa. Pod AmiDevCPP nie da się skompilować ze względu na brak funkcji getch() oraz problemy z linkowaniem.
[#6] Re: Zamiennik funkcji getch()

@pong777, post #5

na brak funkcji getch()


Pod AmigaOS nie uświadczysz tej funkcji. Wyrzuć swoją książkę skażoną Windowsem. Zamiast tego możesz użyć funkcji getchar() jak napisał wyżej asman.
[#7] Re: Zamiennik funkcji getch()

@pong777, post #3

Użyj cin.get();
.
[#8] Re: Zamiennik funkcji getch()

@rePeter, post #7

Zacznę od podstaw. Programik Hello Word z AmiDevCPP:

#include <iostream>

using namespace std;

int main (int argc, char *argv[])
{
  cout << "Hello Amiga_m68k World!" << endl;
  cout << "Press ENTER to continue..." << endl;
  cin.get();
  return 0;
}


Nie linkuje i wyrzuca błąd:

ompiler: m68k-Amiga-OS3
Building Makefile: "G:\Makefile.win"
Executing  make clean
rm -f Amiga_m68k_hello.o Project1.exe

m68k-amigaos-g++.exe -c Amiga_m68k_hello.cpp -o Amiga_m68k_hello.o -I"C:/CrossCompiler/AmiDevCpp/usr/local/amiga/m68k-amigaos/sys-include"    -s -noixemul

m68k-amigaos-g++.exe Amiga_m68k_hello.o -o "Project1.exe" -L"C:/CrossCompiler/AmiDevCpp/usr/local/amiga/m68k-amigaos/lib" -L"C:/CrossCompiler/AmiDevCpp/usr/local/amiga/m68k-amigaos/lib/libb/libnix" -s -noixemul -noixemul  

C:/CrossCompiler/AmiDevCpp/usr/local/amiga/m68k-amigaos/lib/libstdc++.a(misc-inst.o)(.text+0xfe):misc-inst.o: undefined reference to `_getc'
C:/CrossCompiler/AmiDevCpp/usr/local/amiga/m68k-amigaos/lib/libstdc++.a(misc-inst.o)(.text+0x128):misc-inst.o: undefined reference to `_getc'
C:/CrossCompiler/AmiDevCpp/usr/local/amiga/m68k-amigaos/lib/libstdc++.a(misc-inst.o)(.text+0x1cc):misc-inst.o: undefined reference to `_putc'
C:/CrossCompiler/AmiDevCpp/usr/local/amiga/m68k-amigaos/lib/libstdc++.a(basic_file.o)(.text+0x1c4):basic_file.o: undefined reference to `_fdopen'
collect2: ld returned 1 exit status
mingw32-make.exe: *** [Project1.exe] Error 1

Execution terminated


Ostatnia aktualizacja: 09.06.2014 23:26:41 przez pong777
[#9] Re: Zamiennik funkcji getch()

@rePeter, post #7

Chciałbym zauważyć, źe
cin.get()
nie jest do końca "press any key to continue". Po naciśnięciu klawisza trzeba potwierdzić jeszcze enterem.

Poszukuję takiej funkcji, która da możliwość zapauzowania wykonywania programu do momentu naciśnięcia przez użytkownika dowolnego klawisza na klawiaturze.



Ostatnia aktualizacja: 10.06.2014 00:23:48 przez pong777
[#10] Re: Zamiennik funkcji getch()

@pong777, post #9

cin.get()
nie jest do końca "press any key to continue"


No fakt, ale jest rozwiązaniem "Press ENTER to continue..."
.

Ostatnia aktualizacja: 10.06.2014 11:42:39 przez rePeter
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem