Skocz do zawartości

marcinEc

Stały użytkownik
  • Postów

    56
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez marcinEc

  1. Hmmm, nie precyzujesz o co Ci chodzi... Czy: 1. O konwersję pliku? 2. O konwersję stringa w C/C++? 3. Jaki UTF? UTF-8 czy inny? Zastanów się: 4. Co znaczy dla Ciebie "konwersja tablicy znaków"? 5. Formaty kodowań są opisane, czego tak naprawdę potrzebujesz? Wiedzieć tylko jakie kody odpowiadają jakim znakom?? 6. Może biblioteki libiconv (funkcja 'iconv()')? 7. Może wystarczy mbsrtowcs()/wcsrtombs() z 'wchar.h' ?? 8. W jakim środowisku ma to być (system, kompilator). I na koniec mała uwaga: 8. Formatem kodowania jest CP-1250.
  2. marcinEc

    Pure C

    Hmmm, posłuchaj: kompilator to kompilator - będzie tak samo(!) kompilował program w C na Atari, co na PC, tylko, że obsługa grafiki nie znajduje się w żadnej STANDARDOWEJ bibliotece dla C, więc nie masz co liczyć na to, że biblioteka Borland Graphic znajdzie się w PureC na Atari... Chyba, że się firmy(?) dogadały ze sobą... To nie jest kwestia systemu, czy kompilatora. Co rozumiesz jako "wczytanie grafiki do Turbo C"? Otwarcie pliku przez fopen i wczytanie przez fread :-> No przecież nie dodanie pliku do projektu w Turbo C, co jest w ogóle nie możliwe, tak jak w nowoczesnych środowiskach... Nie za dużo "wizualnych" narzędzi w stylu xxx Builder się naoglądałeś? :wink: Czy w ogóle znasz się trochę na sprzęcie TT (co można, assembler, itd.) i programowaniu? Może to nie jest takie proste jak programowanie dla Windows? Przecież każdy format jest opisany (w dodatku te "uniwersalne" wymienione przez Ciebie są wszystkie spakowane, może coś prostszego na początek? BMP? jakiś format stricte Atari ST/TT - bo to przecież i ilość kolorów jest ważna!). Dodatkowo masz już gotowe biblioteki libjpeg czy libpng, które są napisane w C i powinny skompilować się na każdym porządnym kompilatorze (ANSI C?). Tylko co z tego, że wczytasz plik graficzny i rozłożysz go na części (np. bitmapa+kolory), tu już musisz znać sprzęt (może API systemu Atari ST/TT?) żeby WYŚWIETLIĆ grafikę. To samo co z grafiką: ale co chcesz zrobić? Załadować binarny plik? Odegrać je na Atari? Może jest biblioteka dla MODów na Atari? Może nawet edytor?? Może na Atari ST/TT istnieje coś bardziej wysoko poziomowego niż C? Basic, Pascal czy coś innego z obsługą grafiki i muzyki (tak jak np. AMOS na Amigę czy Simons' Basic na C64)?
  3. marcinEc

    constrea.h

    Jakiś przykład takiego systemu? Patrz: http://www.lysator.liu.se/c/c-faq/c-1.html dokładnie: 1.14: Seriously, have any actual machines really used nonzero null pointers, or different representations for pointers to different types? na podanej stronie... Nie o to chodzi, czy istnieją czy nie. To jest błąd porównać bool z NULL, czyli w C++ ze wskaźnikiem (void*)0, ale z samym zerem (czyli false) oczywiście nie jest błędem. Tak czy siak powodzenia w programowaniu :D
  4. Szczerze mówiąc nie mam pojęcia co Twój program ma realizować, i co rozumiesz jako system Q7, ale po zachowaniu programu mogę stwierdzić, że ta cała gimnastyka binarna nie jest potrzebna i wystarczy taki programik: [php:1:d59351e5fe] #include <iostream> using namespace std; int main() { int ia,ib; cout << "Podaj liczbe a: "; cin >> ia; cout << "Podaj liczbe b: "; cin >> ib; signed char a = ia; signed char b = ib; signed int iw = (a*B) / 128; unsigned char w = iw; cout << (int)w; } [/php:1:d59351e5fe] No niestety trzeba bardzo zwracać uwagę na typ zmiennej żeby obliczenia były prawidłowe. Program daje w wyniku 64*64=32 i 192*32=240, tylko powiedz mi co oznaczają te wyniki, bo jakoś nie mogę ich do niczego dopasować (:idea: ułamki stałoprzecinkowe czy coś:?:)...
  5. marcinEc

    Sleep() w C++

    Co, jak, gdzie?????? Co nie działa Sleep() z Windowsa?? Niemożliwe... Ma być 'Sleep(...)', a nie 'sleep(...)'.
  6. marcinEc

    Sleep() w C++

    Być może kompilujesz program dla systemu Windows? Może masz ustawione w projekcie, że program jest windowsowy? Bo np. w Borland C++ 3.11 jest takie coś w nagłówku: [php:1:a9bdd890a2] #if !defined( _Windows ) void _Cdecl sleep( unsigned __seconds ); void _Cdecl sound( unsigned __frequency ); #endif [/php:1:a9bdd890a2] Czyli nie będzie sleep() jeśli jest program pod Winde... Za to jest Sleep z Windows API jeśli dołączysz <windows.h>.
  7. marcinEc

    Pomocy! C PILNE!

    Tu jest bląd: [php:1:e966ad4d07] void wyznacz_pary ( void ) { int n; for ( int x;x<1000;x++ ) { n=wyznacz_sume ( x ); if ( wyznacz_sume ( n ) == x ) { zaprzyjaznione[ilosc_zaprz][0]=x; zaprzyjaznione[ilosc_zaprz][1]=n; ilosc_zaprz++; } } } [/php:1:e966ad4d07] Brak inicjalizacji x w for(), a nie gcc vs g++, stdio.h czy "inne cuda" :P
  8. marcinEc

    constrea.h

    Żartujesz chyba, nie? Język C++ to język formalny o ściśle określonej składni, to nie poezja żebyś mógł sobie interpretować! Nie rozumiesz o czym piszesz: 'constream()' jest konstruktorem, ale 'constream c()' to funkcja. To NIE jest to samo. Przecież to podstawa języka deklaracja zmiennych i funkcji. Jak trzeba łopatologicznie to proszę bardzo: [php:1:6f03113613] int a(); // ale za to 'int a(jakas-wartosc);' jest ok int main() { a = 0xdeadbeef; } [/php:1:6f03113613] Wyjście kompilatora: g.cpp: In function `int main()': g.cpp:4: error: assignment of function `int a()' g.cpp:4: error: cannot convert `unsigned int' to `int ()()' in assignment Tak :lol: int jest typem prostym ale w sensie obiektu 'int()' jest konstruktorem dla int, bo w C/C++ istnieją dwa sposoby inicjalizacji typ zm=wart; lub typ zm(wart);, zresztą nadużywasz jednego z nich :P A 'int a();' to wcale nie jest zmienna 'a' tylko funkcja 'a()' zwracająca int. Nadal nie dociera? :evil: A to, że nie precyzujesz tego co piszesz to tylko Twoja wina. Nie możesz napisać 'int a();' i powiedzieć, że to jest zmienna a, bo nie jest. Dopiero będzie jeśli napiszesz 'int a(0);'. Co do tego "przeładowywania" operatorów (tak naprawdę to zdefiniowania, ale mniejsza z tym...) Porównanie bool z NULL? Hmmm, czemu nie... :roll: Ale działa tylko dlatego, że false jest równe 0, ale czy jest równe NULL, czyli (void*)0? No akurat w kompilatorach dla DOS i Windows WEWNĘTRZNA reprezentacja NULL to adres z wszystkimi bitami zerowymi, ALE istnieją systemy, na których NULL (mimo, że (void*)0) nie jest reprezentowany w taki sposób, np. ma któreś bity ustawione, czyli jego wartość nie wynosi 0. I co wtedy? Sprawdzanie 'if (strumien==NULL)' jest wtedy bez sensu, bo należy to zrobić tak jak zostało zaprojektowane, czyli 'if (!strumien)'. Rozumiesz teraz? BTW. odpowiadając na takie dziwne posty sam wiele się uczę :)
  9. Mimo, że już podano Ci rozwiązanie, ja mam pytanie: po co Ci zwiększanie wskaźnika?? Czy już nie możesz zastosować zwykłego indeksowania tablicy przez nawiasy []?? Skoro używasz przynajmniej dwukrotnie tej tablicy to jaki jest sens zwiększania wskaźnika i trzymania dodatkowo drugiej kopi albo jeszcze odejmowania?? A propos zapominania o wskaźnikach: możesz zapomnieć, że wogóle masz taki wskaźnik, możesz go podwójnie dealokować, itd. itd. Zwiększanie wskaźnika ma sens w krótkich funkcjach, najczęściej operujących na tłańcuchach znakowych, w celu zwiększenia prędkości działania (teoretycznie... kiedyś tak na pewno było) ale powoduje zaciemnienie kodu oraz właśnie problem z ponownym użyciem tablicy. Czy nie lepiej zastosować prostsze rozwiązanie niż na siłę dokładać kod do dość specyficznego...?
  10. marcinEc

    constrea.h

    łomatko człowieku co ty za herezję szerzysz?! Nie jest równoznaczne. Druga deklaracja to deklaracja funkcji bezparametrowej 'c' zwracającej obiekt constream. W C++ nie można definiować prywatnych funkcji w funkcjach ale można za to je deklaraować. O!??? Od kiedy? Poprawna konstrukcja obiektu (przez konstruktor) całkowicie wystarczy do stwierdzenia, że obiekt jest, istnieje i został poprawnie utworzony. Jeśli byłbyś tak miły i pokazał operator== dla strumieni w kodzie nagłówka... Może on jest faktycznie w Borlandzie? Tylko CO porównuje...? :o Istnieje za to operacja odczytu stanu strumienia, przez operator! (w Borland C++), czyli: if ( !stream ) -> stream failed. W GCC jest to operator bool() dla strumieni :) Nie chodziło o to że działa, tylko że nie kończysz programu po wykryciu(!?) błędu. Jednak najprawdopodobniej "standardowy sposob stwierdzania czy strumien dziala" to wielki błąd z Twojej strony. Nawet na pewno.
  11. Niestety nie możesz w taki sposób. 1. czlowiek baza[ilestam]; jest to deklaracja tablicy OBIEKTÓW klasy czlowiek ale nie obiektów klas potomnych! 2. Żeby wyjaśnić dlaczego nie da się zadeklarować takiej tablicy: nie masz domyślnego konstruktora, który MUSI zostać zadeklarowany jawnie, jeżeli zadeklarowałes własny konstruktor z parametrami. Dla konstruowania tablic obiektów(!) jest wymagany konstruktor domyślny, czyli bezparametrowy. 3. Użyj tablicy wskaźników: czlowiek *baza[ilestam]; żebyś mógł wogóle wykorzystać dziedziczenie :) Potem: [php:1:ad271d566b] //... czlowiek *pcz = new nauczyciel(...); baza[N] = pcz; //... [/php:1:ad271d566b] Kilka porad: 4. Kopiujesz łańcuch znaków do niezaalokowanej tablicy [php:1:ad271d566b] //... czlowiek(char imie[], char nazwisko[], int wiek) { strcpy(imie2,imie); strcpy(nazwisko2,nazwisko);wiek2=wiek; } //... i kolejne konstruktory [/php:1:ad271d566b] 5. Programuj zgodnie z obecnymi regułami C++! Specyfikacja C++ mówiąca o używaniu plików nagłówkowych definiuje 32 standardowe pliki, nie ma w nich plików z rozszerzeniem .h, tylko <iostream>,<string>, itd. Ja wiem, że tego nie uczą w szkołach no ale... Użyj po includach: using namespace std; 6. Użyj string zamiast char[]. Odpadną ci problemy z ręcznym kopiowaniem i alokacją łańcuchów. 7. Destruktor w klasie czlowiek (ogólnie w klasie bazowej) powinien być wirtualny. 8. Używaj typu const char* zamiast char* jeśli tylko odczytujesz łańcuch w metodzie/konstruktorze. 9. Używaj list inicjacyjnych w konstruktorach do incjalizowania składowych klas. [php:1:ad271d566b] #include <string> using namespace std; class czlowiek { public: czlowiek(const char *imie, const char *nazwisko, int wiek) : wiek2( wiek ), imie2( imie), nazwisko2( nazwisko ) { } virtual ~czlowiek(); protected: string imie2, nazwisko2; int wiek2; }; [/php:1:ad271d566b]
  12. Zauważ tylko, że niepotrzebnie skomplikowałeś budowę stosu używając implementacji listowej zamiast tablicowej. Autor pytania może już kompletnie zdębieć na ten widok :roll: Wystarczy tablica: [php:1:2742d15a49] const int rozmiar_stosu = 1000; ELEMENTY stos[rozmiar_stosu]; [/php:1:2742d15a49] I tu dochodzimy do tego, że programowanie takiego stosu nie jest wcale takie proste. Trzeba stworzyć o wiele bardziej rozbudowane metody push i pop, itd. niż w przypadku zwykłego stosu liczb int. Dodatkowo, jeśli będę potrzebował zmienić ilość elementów to muszę zrobić to w kilku miejscach, itp problemy. Wiem, że to się wydaje proste, bo to jest proste w koncepcji ale trochę trudniejsze (szczególnie dla początkujących) w (DOBREJ!) implementacji.
  13. marcinEc

    skrypt vbs :]

    Nie sądzisz, że w czasach "poprawności politycznej" ten post jest nie na miejscu? :wink: Tak czy siak, potrzebujesz kilka operacji na plikach/katalogach. Jeżeli sam nie potrafisz wymyśleć jak to zrobić to daj sobie lepiej spokój.
  14. No nie żartuj. Zastanów się jeszcze raz co chcesz zrobić. Czy to na pewno będzie stos? Wątpię... Jakaś struktura na pewno ale nie klasyczny stos, bo dla stosu mamy tylko operacje push/pop, z tym że pop działa na OSTATNIO wpisanym elemencie, jednym elemencie(*), w Twoim przypadku to chyba int. Twój opis bardziej pasuje do kolejki (ang. queue). Wtedy masz do syspozycji dwa wskaźniki: head i tail, gdzie tail oznacza koniec kolejki i tu elementy są zapisywane, a head oznacza początek i z niego elementy są pobierane. W takim podejściu możesz zapisać do pustej kolejki dowolną ilość elementów i odczytać je wszystkie po kolei (w kolejności wpisania) - chyba o to Ci chodzi. (*) oczywiście możliwe jest utworzenie stosu, którego elementami będzie struktura zawierająca w sobie cztery liczby int lub nawet stos klas z rozwiniętym drzewem dziedziczenia, wtedy elementy mogłyby same wiedzieć czym są. Myślę jednak, że to rozwiązanie jest bardziej skomplikowane od kolejki.
  15. Witam. Co??!! Paliłeś jakieś zioła razor?? Albo niekoniecznie... Dobra rada, może warto ją samemu zastosować? Nawaliłeś parę kilo kodu ale co z tego skoro błędnego? Czy dla Ciebie char tab[15][15] ma tylko 15 elementów? Wygląda, że tak, bo w Twoim kodzie jest: [php:1:3cd6a2f235] //... for ( int i = 0 ; i < 15 ; i++) wskaznik1 = wskaznik2; //... [/php:1:3cd6a2f235] Następnym razem sprawdź kod dla CAŁEJ tablicy, a nie tylko dla [0][0] i [0][1]. Nie prościej używać biblioteki standardowej, zamiast wygibasów ze wskaźnikami do tablic??? [php:1:3cd6a2f235] void wypelnij(char sz[][15]) { memcpy( zrudlo, sz, 15*15*sizeof(char) ); } [/php:1:3cd6a2f235] Oczywiście, czy tak czy tak, podejście nie jest zbyt piękne... Za dużo rzeczy jest wpisane na sztywno (rozmiar tablicy), brak hermetyzacji w klasach, itd. A wystarczyło tylko(?) napisać, że w C/C++ przekazywanie tablic można zrobić nie przez deklarację wskaźnika do tablicy(!) ale wystarczy parametr zadeklarować jako tablicę, mając na uwadze to, że pierwszy wymiar tablicy wielowymiarowej (w tym przypadku!) nie jest kompilatorowi do niczego potrzebny i można go pominąc, np. wypelnij(char tab[][15]);. Niestety to na programiście spoczywa obowiązek pamiętania o rozmiarach tablic. Następnie elementy tablicy należy skopiować. Tutaj jeszcze należy wspomnieć o dogodności C++ jaką jest sprawdzanie zgodności typów; Budzix jeżeli dokładnie spojrzysz na błędy pokazywane przez kompilator to możesz(?) domyśleć się jak należy zadeklarować parametr żeby dla kompilatora był on ok (uwaga:nie zawsze to logicznie ma sens...). Wracając do wkaźników: dla Twojego przypadku można użyć wskaźnika, tzn. wywołać metodę: wypelnij( &sz.pole ); jeśli zadeklarujesz: wypelnij(char sz[][15][15]) {...} wtedy typy zgadzają się, bo jest wskaźnik do tablicy dwuwymiarowej! Natomiast char *tab[][] oznacza tablicę wskaźników i dlatego nie działało. I co razor1 można czy nie można deklarować jako wskaźnika?! Oczywiście, że można: char (*sz)[15][15] jest równoważne char sz[][15][15]. Programując w C++ rozważył bym jeszcze możliwość wykorzystania wzorca klasy vector<> z biblioteki STL, wtedy mógłbyś używać konstrukcji vector1 = vector2; zamiast ręcznego kopiowania tablicy :). Wzorce (czy też szablony) są może troszkę zakręcone ale do używania klasy vector czy string nie potrzeba wcala wiedzieć "jak to się robi", a jedynie "jak tego używać".
  16. 1. Mysle, ze nie za bardzo znasz się na programowaniu obiektowym... I z C++ Ci nie idzie. 2. Bez deklaraji klasy stos, możemy się tylko domyślać czym jest spowodowany błąd..(ALE GDZIE???). 3. Po co Ci metoda dodaj(int cc, int mm, int yy, int kk) ??? Czy tak chcesz dodać cztery elementy do stosu??? 4. Co według Ciebie ma to zrobić??? [php:1:8f793909bc] //... stos temp(cc,mm,yy,kk); *(top++)=*temp; //... [/php:1:8f793909bc] temp jest typu stos, a top to zapewne wskaźnik int(?). Skonstruowałeś obiekt temp typu klasa stos i chcesz użyć operatora * na nim??!! I jeszcze na dodatek wpisać "to coś" do tablicy top??!! nie prościej będzie: *(top++) = cc; *(top++) = mm; ... itd.
  17. "A Mersenne prime is a prime of the form 2^P-1. The first Mersenne primes are 3, 7, 31, 127, etc. There are only 41 known Mersenne primes." I po co ta cała dyskusja? 2^127-1 jest liczbą pierwszą Mersenna M127. A co do sprawdzania liczb pierwszych to żyjemy w XXI wieku i trochę już o nich wiemy... Może warto poszukać tej wiedzy, a nie rzucać własne chybione teorie? :?
  18. pit - spokojnie. Przeczytaj sobie oryginalny post, przeczytaj odpowiedź jeszcze raz... i znowu przeczytaj... :roll: Czy dysponujesz opisem bibliotek standardowych C? Masz internet? Możesz znaleźć opis... :) scanf() zwraca ilość POPRAWNIE przypisanych sekwencji formatujących (lub EOF). U nas jest tylko jedna ("%f") i oznacza ona liczbę zmiennoprzecinkową, dlatego po poprawnym rozpoznaniu liczby i przypisaniu scanf() zwróci wartość 1, a przeciwnym wypadku 0, co oznacza niemożność rozpoznania wpisanego łańcucha - ale to tylko w tak prostym przypadku jak u nas! Można np. wczytać dwie liczby "%f %f" wtedy scanf() może zwrócić 0, 1 lub 2 - zależnie od ilości poprawnych przypisań. 8) p.s. Sory za MiHow, zamiast MeHow ;->
  19. No tak. 1. W drugiej części programu ma być: [php:1:4d71eb58ea] plik2.getline(x,sizeof(x)); cout << x; [/php:1:4d71eb58ea] zamiast [php:1:4d71eb58ea]cout<<plik2.getline(x,sizeof(x));[/php:1:4d71eb58ea] Chcesz przecież wydrukować bufor x, odczytany przez getline. 2. ZAMKNIJ plik po zapisaniu do niego wartości! Operujesz na tym samym pliku! Najpierw do niego zapisujesz i musisz zamknąć - zapewni to zapisanie fizyczne (bo tak naprawdę system używa cache'u czyli pamięci komputera do przechowywania pliku przy zapisie i odczycie). Dopiero wtedy plik się zmieni i ponowne otwarcie i odczyt będzie działać prawidłowo. Rozumiesz? Czyli przed linijką: plik2.open(nazwa,ios::nocreate); musisz dopisać plik.close(); a z końcówki programu to wywalić. 3. Pomyliły Ci się sposoby dostępu do plików/strumieni :> Nie widziałeś, że za drugim razem plik nie jest otwierany (ponieważ już BYŁ otwarty do zapisu), gdyż takie sprawdzenie if (!plik2) {} wcale nie sprawdzi czy plik jest otwarty. W tym wypadku plik2 jest obiektem już istniejącym (od chwili deklaracji, czyli: ifstream plik2;). Sprawdzenie powinno polegać na wywołaniu odpowiedniej metody dla obiektu typu ifstream, czyli is_open(). Jeżeli zwraca true to plik jest otwarty. Czyli: [php:1:4d71eb58ea] plik.open(nazwa,ios::out); if ( plik.is_open()==false ) { cout<<"kupa nie udalo sie"; } [/php:1:4d71eb58ea]
  20. marcinEc

    Tableka w C++

    Koledzy wiedzą, że gdzieś dzwoni tylko nie bardzo wiedzą gdzie... Otóż cout oczywiście posiada odpowiednie funkcje do sterowania wydrukiem, np. precyzją liczb, szerokością pól, itp. Dołączam przykładowy programik, który nakieruje Cię odpowiednio: [php:1:06f2a0a7c8] #include <iostream> #include <iomanip> using namespace std; int main() { cout << "|" << "costujest" << "|" << endl; cout << "|" << setw(15) << "costujest" << "|" << endl; cout << "|" << setw(15) << left << "costujest" << "|" << endl; } [/php:1:06f2a0a7c8] Idea jest taka żeby odpowiednio sterować szerokością pola. Akurat tutaj użyłem manipulatorów dla cin (to co można wpisać po <<) ale również istnieją odpowiadające im metody (np. setw() -> cout.width(), itp.). Opis możesz znaleźć w helpach, książkach, itp.
  21. 1. Czemu używasz asm w TPascalu? Brakuje Ci takiej funkcjonalności w standardowych bibliotekach TP (odczyt znaku, czyszczenie bufora)?? Czy po prostu używasz TP jako kompilatora asm?!? 2. Dlaczego zakładasz, że bufor klawiatury i buforowane standardowe wejście (stdin) mają ten sam bufor?? Jeżeli używasz przerwania klawiatury INT16h do odczytu znaków to wyczyść bufor również tym przerwaniem (radze przyjrzeć się temu: Int 16/AH=04h - Tandy 2000 - KEYBOARD - FLUSH KEYBOARD BUFFER - chociaż może nie działać...). A dla INT21h używaj standardowego wczytywania z stdin, np.: Int 21/AH=07h - DOS 1+ - DIRECT CHARACTER INPUT, WITHOUT ECHO 3. Int 16/AH=22h - KEYBOARD - GET 122-KEY SHIFT STATUS (122-key kbd support only) - Na pewno tym chcesz odczytywać znak z klawiatury?!?!
  22. Faktycznie musisz mieć drętwy podręcznik albo dokładniej go czytaj :> Otóż funkcje pochodzące z biblioteki standardowej 'stdio.h' (czyli: fopen, fread, fclose, itp.) MUSZĄ (powinny :-) ) być w każdym kompilatorze. Najprościej powiedzieć, że są w każdym szanującym się kompilatorze języka C/C++, a także, że funkcje te bedą działać pod DOSem, pod UNIXem, pod Windows, i są w standardzie ANSI C. Natomiast funkcje open czy creat pochodzą z biblioteki 'io.h', która jest biblioteką na niższym poziomie, bardziej zależną od systemu operacyjnego. Nikt nie zabroni, ani nie może Ci nakazać stosowania ktorejś z ww. bibliotek ale RADZĘ stosować standardowe rozwiązanie z 'stdio.h'. Pamiętaj też, że w C++ możesz stosować strumienie (tak jak napisał lcf). Pomyśl chwilę... Skoro cin jest standardowym strumieniem wejściowym, to czy możesz coś takiego napisać w ogóle? Spójrz także na to wyrażenie od strony języka: kropka oznacza dostęp do składowej obiektu, czy cin jest składową obiektu plik? Nie wydaje mi się... Sam otworzyłeś własny strumień wejściowy podłączony do pliku i z niego czytasz. Tu jeszcze przyczepiłbym się do wczytaywania łańcucha znaków do bufora o ograniczonym rozmiarze. Co jeśli znaków będzie więcej niż 256? Program może się wywalić...(btw. jest to typowy bląd wykorzystywany przy włamywaniu się do komputerów :-). Akurat w tym przypadku zalecane jest użycie funkcji fgets (lub innej), która kontroluje rozmiar bufora przeznaczonego na łańcuch znakowy i nie pozwoli na wczytanie większej ilości znaków.
  23. Człowieku 'magiczna-pało' niepotrzebna strata czasu z Twojej strony na wypisywanie tych bzdur. Skompilowałeś chociaż swój kod? Sprawdziłeś czy działa? To jest totalna bzdura! Po kilku poprawkach może coś by z tego było... Nie wiesz o co chodzi? O brak inicjalizacji zmiennych 'pało', o ile można się domyśleć, że liczba to nasza liczba, o tyle dalej jest już tylko gorzej... Wiem, że chodziło Ci o pomnożenie przez 10 przez co uzyskamy jedna cyfrę z ułamka ale coś Ci nie poszło... Nawet bardzo Ci nie poszło... A co do liczb ujemnych to czy dla liczby -123.456 cześć ułamkowa przedstawiona w ten sposób jak chciał autor pytania to dla Ciebie -456?? Można i tak... Bo nie ma tego w założeniach [sarkazm].
  24. Witam, 1. Jesli juz musisz uzywaj <fstream> dla C++, a nie <fstream.h> 2. a.cpp:12: error: ISO C++ forbids declaration of `max' with no type ma byc: const int max=10; 3. a.cpp: In function `void text()': a.cpp:28: error: invalid conversion from `char' to `const char*' chyba mialo byc, np.: char file_name[256] ?? 4. Nie prosciej jest otwierac pliki standardowo: fopen()/fclose() Z pliku mozna czytac sformatowane dane funkcja fscanf(), np.: fscanf( file, "%d,%d", &a,&b ); Jesli juz koniecznie musisz pobrac string to zrob to przez fgets(). 5. Pamietaj, ze uzywanie globalnych zmiennych do przesylania danych miedzy funkcjami NIE JEST dobrym ani bezpiecznym rozwiazaniem, od tego sa parametry funkcji. 6. Co zrobisz jesli nagle bedziesz potrzebowal string o wiekszej dlugosci niz zadeklarowane przez Ciebie 25 znakow. I w zasadzie to czemu uzywasz stringa do przechowywania liczb??!?! Dlaczego przynjmniej nie jest to tablica int? Przewaznie char=bajt=8-bitow, a int=32-bity.
×
×
  • Dodaj nową pozycję...