Forum Gry Hobby Sprzęt Rozmawiamy Archiwum Regulamin

Forum: Programowanie- C++. Problem

05.04.2011 19:51
😐
1
Noras1991
38
Konsul

Programowanie- C++. Problem

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:

http://wklej.to/tacKN

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...

05.04.2011 19:54
2
odpowiedz
zanonimizowany3972
87
Legend

kategoria -> szkoła
Wklej kod na jakąś stronę i dopiero wtedy zlinkuj, bo GOL nie lubi wielu znaczników.

05.04.2011 19:58
3
odpowiedz
Noras1991
38
Konsul

Dzięki Narmo... Zmieniłem kategorie. Ale gdzie wkleić to nie mam pojęcia..

EDIT: Jeszcze raz dzięki :] Fajna stronka

05.04.2011 19:58
4
odpowiedz
zanonimizowany3972
87
Legend
05.04.2011 20:03
mackof
5
odpowiedz
mackof
46
Prypiat

pastebin.pl

Kod masz strasznie brzydki i zagmatwany. Proponuję abyś napisał co ten program ma robić dokładnie.

05.04.2011 20:07
6
odpowiedz
Noras1991
38
Konsul

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...

05.04.2011 20:13
7
odpowiedz
zanonimizowany2673
72
Legend

Naucz się zamykać nawiasy, które otwierasz. Choćby pierwszy z brzegu błąd to niezamknięty switch z 75. linijki.

05.04.2011 20:14
GBreal.II
8
odpowiedz
GBreal.II
136
floydian

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 ;) ]

05.04.2011 20:16
mackof
9
odpowiedz
mackof
46
Prypiat

http://pastebin.pl/39577

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.

05.04.2011 20:21
10
odpowiedz
Noras1991
38
Konsul

EDIT: Zaraz sprawdzę ...

05.04.2011 20:34
11
odpowiedz
Noras1991
38
Konsul

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...:)

05.04.2011 20:40
mackof
😊
12
odpowiedz
mackof
46
Prypiat

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.

05.04.2011 20:42
😊
13
odpowiedz
Noras1991
38
Konsul

Dzięki jeszcze raz :)
Jeszcze będę pisał jak będą jakieś problemy:)

05.04.2011 20:44
mackof
14
odpowiedz
mackof
46
Prypiat

Możesz pisać pod gg 4386169, zwykle jestem niewidoczny ;)

06.04.2011 21:01
15
odpowiedz
Noras1991
38
Konsul

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:)

06.04.2011 21:51
16
odpowiedz
DEXiu
151
Senator

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.

06.04.2011 21:58
17
odpowiedz
zanonimizowany279646
53
Legend

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.

06.04.2011 22:24
18
odpowiedz
Noras1991
38
Konsul

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.

06.04.2011 23:04
19
odpowiedz
zanonimizowany279646
53
Legend

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 :)

06.04.2011 23:23
20
odpowiedz
Noras1991
38
Konsul

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

06.04.2011 23:31
21
odpowiedz
zanonimizowany279646
53
Legend

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ąć.

12.04.2011 20:11
22
odpowiedz
Noras1991
38
Konsul

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?:)

12.04.2011 20:17
23
odpowiedz
zanonimizowany550804
35
Generał

Jakos trudno mi uwierzyc, ze nie miales tego przerabianego..

12.04.2011 20:22
24
odpowiedz
Noras1991
38
Konsul

na lekcjach ? ;)

Na lekcjach mało co robimy...
Sam muszę do większości rzeczy dochodzić;P

12.04.2011 22:45
25
odpowiedz
MOD
186
Generał
Forum: Programowanie- C++. Problem