ďťż

Ładny brzuch

Witam. Tworzę sobie w celach edukacyjnych takie małe jądro systemu operacyjnego, niektóre funkcje wprost przekopiowałem z różnych kursów i nie rozumiem działania niektórych z nich, a raczej jednej - funkcji przechwytującej klawiaturę. Funkcja getch() pobiera od użytkownika wciśnięty klawisz, jednak zwraca jego wartość za pomocą unsigned char, czyli, jak się orientuję zmiennej char w postaci liczbowej (bo podobno :/ taka istnieje). Ja chcę wciśnięte klawisze zapisywać do zmiennej char komenda i po wciśnięciu entera zawartość 'komenda' przesłać do funkcji, która odczyta tekst w niej zawarty, zidentyfikuje w if(komenda == "wersja") i wykona jakieśtam polecenie. Mój problem jest taki, że nie wiem jak przekonwertować wartość zwracaną przez getch() (czyli unsigned char) do zwykłego char. To wygląda tak:

ch - to jest właśnie unsigned char z wciśniętym klawiszem
komand - zmienna char do której wpisuję po kolei wciśnięte klawisze

komand += ch; - to mi nie działa

W jaki sposób to wykonać? I jeszcze jedno pytanie, pobliskie do tego - system operacyjny pisze się oczywiście od zera, czy może ktoś wie jak stworzyć bibliotekę (czy coś tam), abym w środowisku mojego OSa mógł używać zmiennej typu CString(AnsiString)?




jednak zwraca jego wartość za pomocą unsigned char, czyli, jak się orientuję zmiennej char w postaci liczbowej (bo podobno :/ taka istnieje) 1. Możesz przypisać char jako wynik getch().
2. komand += ch; działa :>
3. Nie znasz podstaw, a piszesz os'a?
Użytkownik Cyrkiel edytował ten post 15 luty 2007, 17:11

Funkcja getch() pobiera od użytkownika wciśnięty klawisz, rozumiem ze tego getch'a napisales sam?

zidentyfikuje w if(komenda == "wersja")
jak mozna porownywac char'a do lancucha znakow? O_o Musisz napisac funkcje co wczyta ci tekst do tablic'y charow (np petla z tym getch'em), cos a'la scanf a potem porowna za pomoca strcmp, to nie std::string ze masz przeciazony operator ==.
To co zwraca ci getch mozesz porowna jedynie z jednym znakiem, np. komenda == 'x'
Tak jak Cyrkiel, proponuje Ci najpierw jakis kurs C od podstaw.

Co jeszcze do tekstu:

jednak zwraca jego wartość za pomocą unsigned char, czyli, jak się orientuję zmiennej char w postaci liczbowej (bo podobno :/ taka istnieje)
Owszem istnieje, ale inaczej niż myślisz. W C char jest generalnie liczbą 8 bitową którą można traktować jako znak w zależności od kontekstu danego fragmentu kodu. Kwestia, że z godnie z teorią słowo kluczowe unsigned zapewnia wartości całkowite dodatnie czyli unsigned char ma zakres 0...255. Z tego wynika, że char powinien mieć -128...127, ale chyba dla wygody tak nie jest. Dopiero signed char spełnia ten zakres.
Użytkownik reVis edytował ten post 15 luty 2007, 23:53



niektóre funkcje wprost przekopiowałem z różnych kursów i nie rozumiem działania niektórych z nich,
A, które napisałeś sam?
Co do chara i "postaci liczbowej"
proponuje zastanowić się nad działaniem poniższego kodu :]
char a = '0'; char b = 'A'; char c[8]="ABCDEFG"; unsigned int ia,ib,ic; unsigned int * pi; ia = a + b; // ia = 113 pi = (unsigned int*)c; ib = *pi; // ib = 1145258561 pi = (unsigned int*)(c+4); ic = *pi; // ic = 4671045
To są podstawy ;]

Połowa już za mną. Stworzyłem typ AnsiString (typedef char AnsiString[64], btw. ile oryginalny AnsiString ma bajtów?) i udaje mi się do niego wczytywać kolejne literki (AnsiString komand[lz] = ch, gdzie lz to liczba zapisanych znaków). Działa nawet funkcja pisz(komand). Nie wiem jednak, jak porównać tego arraya z ciągiem znaków. icek coś o tym wspominał, może mnie ktoś oświecić? (chodzi o to, że if(kommand == "wersja") nie działa)

skorzystaj z memcmp lub strcmp albo napisz sobie wlasna funkcje (porownuj kazdy znak w petli , jezeli sa rozne to przerwij petle i zwroc false w innym przypadku zwroc true) i wtedy mozesz if( strcmp( twojstring, "komenda" ) )

A skąd wytrzasnąć memory compare (memcmp)? Oczywiście mogę sobie skleić funkcję, tylko myślałem, że są prostsze sposoby (czyli ==). No to dzięki, już was nie męczę. I nie przejmujcie się mną, że piszę OSa jak nie znam C. To tylko zabawa, nie mistrzostwa świata. Poza tym lepiej mi się uczy w praktyce, niżbym miał stać przed kompem z książką w ręce i przepisywać denne linijki dennego kodu. "Wolnoć tomku, w swoim domku", jak to Fredro powiedział.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •