Witam:)
Ostatnio dostałem na zadanie zrobienie książki telefonicznej w C++.
Od tego będzie zależała moja ocena na koniec szkoły.
Już trochę zrobiłem ale mam problemy bo wyskakują błędy i nie wiem
o co chodzi.
Oto kod programu:
A to są błędy, które wyskakują
C:\Users\Mateusz\Desktop\program na programowanie\Untitled7.cpp In function `int odczyt()':
81 C:\Users\Mateusz\Desktop\program na programowanie\Untitled7.cpp expected primary-expression before "int"
81 C:\Users\Mateusz\Desktop\program na programowanie\Untitled7.cpp expected `;' before "int"
101 C:\Users\Mateusz\Desktop\program na programowanie\Untitled7.cpp expected primary-expression before "int"
101 C:\Users\Mateusz\Desktop\program na programowanie\Untitled7.cpp expected `;' before "int"
125 C:\Users\Mateusz\Desktop\program na programowanie\Untitled7.cpp expected primary-expression before "int"
125 C:\Users\Mateusz\Desktop\program na programowanie\Untitled7.cpp expected `;' before "int"
149 C:\Users\Mateusz\Desktop\program na programowanie\Untitled7.cpp expected primary-expression before "int"
149 C:\Users\Mateusz\Desktop\program na programowanie\Untitled7.cpp expected `;' before "int"
173 C:\Users\Mateusz\Desktop\program na programowanie\Untitled7.cpp expected `›' at end of input
Nie mam pojęcia co jest nie tak :|
Bardzo proszę o pomoc... Lub doradzenie na jakim forum mogę dostać szybko odpowiedź... Bo mi to na jutro-najpóźniej
na czwartek trzeba...
kategoria -> szkoła
Wklej kod na jakąś stronę i dopiero wtedy zlinkuj, bo GOL nie lubi wielu znaczników.
Dzięki Narmo... Zmieniłem kategorie. Ale gdzie wkleić to nie mam pojęcia..
EDIT: Jeszcze raz dzięki :] Fajna stronka
pastebin.pl
Kod masz strasznie brzydki i zagmatwany. Proponuję abyś napisał co ten program ma robić dokładnie.
Program ma zapisywać kontakty do pliku.
Na razie udało mi się tylko zrobić, że za każdym wprowadzaniem i zapisaniem
do pliku usuwa starą zawartość pliku... A chciałbym, żeby tylko dopisywał.
Powinien również odczytywać kontakty z pliku.... Ale coś też nie działa poprawnie...
Z resztą opcji jest w porządku raczej...
Naucz się zamykać nawiasy, które otwierasz. Choćby pierwszy z brzegu błąd to niezamknięty switch z 75. linijki.
Linia 75 w pliku pod linkiem. Otwierasz nawias (klamrę) po switchu ale nigdzie go nie kończysz. W funkcji odczyt jest w sumie 3 klamry otwierające a tylko dwie zamykające, po czym następuje kolejna funkcja.
edit: [następnym razem obiecuję odświeżać wątek przed naciśnięciem 'Opublikuj ;) ]
Gdzieś brakowało Ci klamry. W funkcji oplik źle zapisany getline. getline (nazwa_obiektu, nazwa_stringa, znak do którego zczytujemy - domyślnie enter). Zczytywałeś Cstringa (tablicę charów), a getline zczytuje tylko stringi. Gdzieś zmieniłem getch() na getchar(). Działa, ale nie wiem, czy poprawnie, bo siedzę na linuksie, a tam nie ma niestety funkcji system (). Usunąłem bibliotekę conio.h, bo nie mam pojęcia do czego ona jest.
Polecam zapoznać się z ifstream, ofstream i seekg.
Dziękuję Wam bardzo :)
Działa już dobrze...
A potrafiłby mi ktoś podpowiedzieć jak zrobić wyszukiwarkę np po imieniu albo po numerze telefonu? z tego pliku...:)
Możesz albo użyć funkcji find (nie pamiętam argumentów, zajrzyj na cplusplus.com), albo ewentualnie napisać własny algorytm wyszukiwania wzorca w tekście.
No i trochę program rozbudowalem :)
Oto link: http://wklej.to/YKMiB
Ale jak zwykle jakiś problem jest:)
(jeśli ktoś chce przetestować to trzeba zrobić dwa pliki ksiazkatel.txt i wyszukaj2.txt)
1. W funkcji wyszukaj sa dwie opcje wyszukiwania:
-wyszukiwanie numeru poprzez wpisanie imienia i nazwiska(bez spacji) - to działa
-wyszukiwanie Imienia i Nazwiska poprzez wpisanie numeru telefonu. (wyszukuje to z pliku wyszukaj2.txt). I to nie działa.
2. W programie jest funkcja wyjscie która zamyka program.
-jak w programie uruchomię funkcję wyszukaj funkcja ta nie zamyka programu.
Gdy uruchamiam inne funkcje to zamykanie potem działa...
Także w tej jednej funkcji wyszukaj() coś jest nie tak:)
Ma ktoś może pomysł jak to zrobić?
A może znacie funkcje, które w lepszy sposób wyszukują wiersz z pliku,
w którym zawarty jest wprowadzony łańcuch znaków a potem je wypisuje?
Jak zawsze- proszę o pomoc:)
Może napiszesz jaśniej JAKI "problem jest"? Poza tym umiejętność samodzielnego debugowania kodu jest chyba nawet ważniejsza od samego "klepania". Błędy syntaktyczne wychwyci kompilator. Wystarczy nauczyć się czytać to, co wypluwa i interpretować - przeważnie ładnie pisze w której linii i co nie bangla. Ale uwaga! Czasami zdarza się, że błąd jest np. na końcu linii poprzedniej. Ponadto należy ZAWSZE naprawiać błędy od najwcześniejszego (pod względem numeru linii w kodzie), ponieważ nierzadko błąd w istocie jest tylko jeden, a cała reszta to już kaskada błędów składniowych wynikających z tego pierwszego (np. niedomknięta klamra etc.)
Natomiast błędy koncepcyjne niestety musisz znaleźć sam (najprościej śledzić sobie poszczególne zmienne wypisując je co parę linii (tzn. tam, gdzie cokolwiek się mogło zmienić rzecz jasna) na ekran.
Całkiem możliwe, że ta funkcja wyszukaj() nie wychodzi po prostu z jakiejś pętli (nigdy nie jest spełniony warunek wyjścia) i dlatego nie działa następnie funkcja wyjscie() - bo nie działa nic, co jest po funkcji wyszukaj(), która nigdy się nie kończy.
Jest może gdzieś na google napisana jakaś gotowa wyszukiwarka?
Bo ta moja to jest mało fajna;P
Albo funkcja jakaś...
Bo chciałbym , żeby to działało tak:
1) W pliku tekstowym mam w jednej linijce wszystkie dane jednej osoby, w drugiej wszystkie dane drugiej osoby itd.
2) Wpisuje słowo, które zapamiętuje się w zmiennej string.
3) Zostaje przeszukany cały plik tekstowy dopóki nie zostanie znalezione wpisane słowo
w tym pliku.
4) Po wyszukaniu słowa zostaje wypisany cały wiersz z danymi osoby.
W programie, do którego dałem link zrobiłem dwa pliki tekstowe: ksiazkatel.txt i wyszukaj2.txt
-dlatego, że wyszukiwarka zaczyna porównywać początek wiersza z wprowadzonym słowem i jak pierwszy znak jest inny idzie do następnego wiersza. Tak więc jeśli chciałem zrobić możliwość wyszukiwania Imienia i Nazwiska oraz wyszukiwania numeru telefonu musiałem
w jednym pliku tekstowym mieć zapisany w linijce najpierw numer telefonu, potem Imie i Nazwisko a drugim pliku najpierw Imie i Nazwisko a potem numer.
Niczego takiego nie musiałeś. Mogłeś opracować jakiś format zapisu, który umożliwiłby posiadanie wszystkiego w jednym pliku. Np. posłużyć się znakiem, który nigdy nie występuje ani w numerze, ani w imieniu czy nazwisku. Przykładowo:
Jan | Kowalski | 112 112 112
Oczywiście w zależności od potrzeb możesz to zrobić nieco inaczej. Taki znak umożliwia Ci następnie dzielenie danej linijki na odpowiednie dane. I możesz je np. wpisać dzieląc po tym znaku, do jakiejś tablicy tablica[0]: Jan; tablica[1]:Kowalski; tablica[2]:112 112 112. Mając tablice wielowymiarowe jeszcze ciekawiej można tym operować.
Tak czy owak - masz znak, który w danych wystąpić nie może, może więc być użyty jako element swoistej "składni" zapisu danych. Tę składnię, w miarę potrzeb (jakichś bardziej skomplikowanych wyszukiwań; dla zwiększenia efektywności, o ile widzisz taką możliwość przy usprawnieniu składni), możesz poszerzyć.
Sam plik tekstowy - o czym być może już wiesz - zawiera tego typu element składniowy, mianowicie znak końca linijki. Tylko z tego powodu C++ wie co w ogóle oznacza kolejna linia, bez niego wszystko byłoby jednym ciągiem.
http://pl.wikipedia.org/wiki/End-of-line
Kombinuj, w tym cała zabawa, w tworzeniu :)
Dokładnie :)
Dzięki... Ciekawy pomysł... Będę próbował:)
A co z tego wyjdzie to sie okaże:)
Pzdr;]
A dzisiaj już ledwo na oczy widzę i ide spać:P
Tylko miej na uwadze coś następującego:
http://www.intercon.pl/~sektor/cbx/basics/lexicals.html (paragraf: literały)
http://swiatinformatyki.ovh.org/kurscplus7.php
Chodzi o to, że w pewnych sytuacjach coś o czym byś nie chciał by było interpretowane (lecz traktowane jako zwykły znak) jest interpretowane, albo na odwrót.
Z dawnych doświadczeń wiem, że tworząc jakieś własne składnie zapisów w plikach tekstowych itp. można na tego typu rzeczach się czasami zaciąć.
Witam :)
Teraz pracuje nad innym drobiazgiem.. w programie wypisywana jest liczba porządkowa :)
I wpadłem na pomysł, żeby troszkę to przerobić...
Mam taki problem...
1. Deklaruje zmienną typu string
2. Zapisuje pod nią zawartość pliku w którym zapisywana jest liczba porządkowa
3. Pod inną zmienną int muszę przypisać wartość zmiennej typu string z zawartością pliku.
I chyba wiem w czym jest problem... Trzeba pewnie użyć jakiejś funkcji albo czegoś
żeby zmienić typ ze string na int i potem odwrotnie...
Wiecie może czy tak sie da zrobić?:)
Jeśli tak to jak?:)
Jakos trudno mi uwierzyc, ze nie miales tego przerabianego..
na lekcjach ? ;)
Na lekcjach mało co robimy...
Sam muszę do większości rzeczy dochodzić;P
Noras1991>> Może ten link Ci pomoże:
http://4programmers.net/C/Konwersje_int_na_string_i_string_na_int