Skocz do zawartości
Zamknięcie Forum PC LAB

Szanowny Użytkowniku,

Informujemy, że za 30 dni tj. 30 listopada 2024 r. serwis internetowy Forum PC LAB zostanie zamknięty.

Administrator Serwisu Forum PC LAB - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie: wypowiada całość usług Serwisu Forum PC LAB z zachowaniem miesięcznego okresu wypowiedzenia.

Administrator Serwisu Forum PC LAB informuje, że:

  1. Z dniem 29 listopada 2024 r. zakończy się świadczenie wszystkich usług Serwisu Forum PC LAB. Ważną przyczyną uzasadniającą wypowiedzenie jest zamknięcie Serwisu Forum PC LAB
  2. Dotychczas zamowione przez Użytkownika usługi Serwisu Forum PC LAB będą świadczone w okresie wypowiedzenia tj. do dnia 29 listopada 2024 r.
  3. Po ogłoszeniu zamknięcia Serwisu Forum od dnia 30 października 2024 r. zakładanie nowych kont w serwisie Forum PC LAB nie będzie możliwe
  4. Wraz z zamknięciem Serwisu Forum PC LAB, tj. dnia 29 listopada 2024 r. nie będzie już dostępny katalog treści Forum PC LAB. Do tego czasu Użytkownicy Forum PC LAB mają dostęp do swoich treści w zakładce "Profil", gdzie mają możliwość ich skopiowania lub archiwizowania w formie screenshotów.
  5. Administrator danych osobowych Użytkowników - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie zapewnia realizację praw podmiotów danych osobowych przez cały okres świadczenia usług Serwisu Forum PC LAB. Szczegółowe informacje znajdziesz w Polityce Prywatności

Administrator informuje, iż wraz z zamknięciem Serwisu Forum PC LAB, dane osobowe Użytkowników Serwisu Forum PC LAB zostaną trwale usunięte ze względu na brak podstawy ich dalszego przetwarzania. Proces trwałego usuwania danych z kopii zapasowych może przekroczyć termin zamknięcia Forum PC LAB o kilka miesięcy. Wyjątek może stanowić przetwarzanie danych użytkownika do czasu zakończenia toczących się postepowań.

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

bartek161616

[C++] Problem z pętlą

Rekomendowane odpowiedzi

											  
slowa= new string[ile];


	   it=0;

			   for(j=0;j<strlen(msg);j++)
				{


				 b=msg[j];


			  if((static_cast<int>(b)>=65 && static_cast<int>(b)<=90)|| 
				 (static_cast<int>(b)>=97 && static_cast<int>(b)<=122)) 
				 {

				  c=b;

				 slowa[it]=slowa[it]+c;	   
				 block=false;   
				 }

				 else 
				 {

			   if(block==false) it++;
			   block=true;

				  }


		   }																   }																	   }

 

 

 

ten fragment kodu powinien wyławiać z tablicy charów msg ciągi znaków złożone tylko z a-z lub A-Z.... Niestety dla niektórych danych po prostu się zawiesza i wyskakuje okienko o błędach windows. Ilość ciągów została zliczona wcześniej. I kazdy ciąg do osobnego pola tablicy zapisuje.

 

.A .aaAAAaaA.aAAaaaa - dla takich danych mi się zawiesza.... co tam może być nie tak ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

cout << ile << endl ;

...

 

cout << it << endl ;

slowa[it]=slowa[it]+c;

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

a już chyba mnie nakierowałeś

 

wystarczy dać na początku block=true; (przed pętlą)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak uzywac C++ to uzywac C++. Ja zrobilem to tak:

 

int WINAPI WinMain (HINSTANCE   hInstance,
				HINSTANCE   hPrevInstance,
				LPSTR	   lpszCmdLine,
				int		 nCmdShow)
{
string Napis, slowko;
int it=0;
Napis = lpszCmdLine;
for (int i=0;i<Napis.length();i++)
{

	if (((int)Napis[i]>=65 && (int)Napis[i]<=90)||((int)Napis[i]>=97 && (int)Napis[i]<=122))
	{
		slowko[it] = Napis[i];
		it++;
	}
}
MessageBox(NULL, slowko.c_str(), "Okienko :) ", MB_OK | MB_ICONEXCLAMATION);
return 0;

}

 

I dziala. Na .A .aaAAAaaA.aAAaaaa dostalem tylko male i duze a.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

thebigzumzum... moze od razu w DirectX napiszesz? a pod linuxa poprosze wersje z uzyciem Qt lub Gtk2.

 

a zamiast liczb nalezy stosowac 'a' 'z' i 'A' 'Z'. A najlepiej to po prostu metody isalpha ze standardowej biblioteki ansi <ctype.h>

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
thebigzumzum... moze od razu w DirectX napiszesz? a pod linuxa poprosze wersje z uzyciem Qt lub Gtk2.

 

a zamiast liczb nalezy stosowac 'a' 'z' i 'A' 'Z'. A najlepiej to po prostu metody isalpha ze standardowej biblioteki ansi <ctype.h>

 

Bez przesady. Ja sie dopiero ucze WinApi i C++ i napisalem to w ten sposob zeby sie sam czegos nauczyc. Ciezko samemu wymyslac sobie zadania do zrobienia.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

jest to część zadania konkursowego..... I niestety znów gdzieś jest błąd, nie wywala już błędu windows, ale SIGSEGV.... Co może go powodować ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

o dziwo program się dał skompilować... Wyjdę na głupka jak powiem że nigdy nie używałem debbugera i nie umiem go użyć ?

xD

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeśli dopiero zaczynasz z programowaniem, to na głupka nie wyjdziesz. A jeśli jesteś "pro", to musisz mieć debugger w głowie, jeśli go podczas programowania nigdy nie używałeś :P

 

W każdym razie debugger naprawdę się przydaje, powinieneś zacząć z nim pracować.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

heh... jestem coś pomiędzy..... zawsze miałem w głowie :P Ale w SIGSEGV nie potrafię tego znaleźć.

Ale za objaśnienie debbugera będę wdzięczny... Piszę w DEV-C++

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Piszę w DEV-C++

To przestań. W dev debugger albo nie działa, albo działa kiczowato. W normalnym środowisku klikasz na pionowym, szarym pasku na lewo od liniki od której chcesz zacząć debugować, uruchamiasz program w trybie debugowania, a później używasz opcji np step into aby oglądać co się dzieje. W każdym momencie możesz ustawić kursor nad zmienną i zobaczyć jaką ma wartość, i sporo innych rzeczy. Poszukasz w google to się dowiesz.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Chyba we wszystkich srodowiskach IDE przy opcjach projektu jest docelowa kompilacja (target?) i sa dwie opcje (domyslnie): Debug i Release. Jezeli w opcjach srodowiska masz dobrze podana sciezke do debuggera i sam debugger jest sprawny to w opcjach projektu wybierz aby kompilowal do Debug. Wtedy skompiluj i uruchom i gdy bedzie jakis blad to w okienku na dole wyskocza bledy razem z numerem lini gdzie to sie stalo oraz w oknie z kodem bedziesz mial pokazana linijke w ktorej wyskoczyl blad. Akurat w Code::Blocks aby uruchomic debuggera trzeba skompilowac do Debug i z menu Debug wybrac Start.

 

Dodatkowo debugger pozwala stawiac brakepointy. Brakepointy stawia sie klikajac po lewej stronie w oknie z kodem. Powinna sie przy linijce pokazac czerwona kropka. Wtedy uruchamiajac debuga program zatrzyma sie na tej linijce. Potem przyciskami np. Step Into mozesz wykonywac program linijka po linijce jednoczesnie podgladajac wartosci zmiennych jakie w przyjmuja.

 

Kompilowanie do (build target):

a18f34b3e4e968ecm.jpg

 

Ustawienie sciezki do debuggera:

6a0076dd538dc0b5m.jpg

 

Podgladanie zmiennych podczas dzialania programu ( w brakepoint ):

0f9ac6be69f3f45dm.jpg

Po lewej jest okno ze zmiennymi ktore podgladasz. Prawy guzik na zmienna i Watch variable ( w zaleznosci od IDE ) i do okienka dodaje sie zmienna. Niektore srodowiska pokazuja wartosci zmiennej jak dluzej przytrzymasz kursor nad nia. Ten niestety pokazuje jedynie typ zmiennej. Widac takze ze przy 21 linijce postawiony jest brakepoint i w tym miejscu program sie zatrzymal. Nad oknem Watches sa kontrolki do sterowania przebiegiem programu linijka-po-linijce.

 

Mam nadzieje ze chociaz troche przyblizylem ci Debuggera. Sorki ze to nie Dev-C++ ale tylko tego mam u siebie zainstalowanego a srodowiska sa podobnie skonstruowane wiec w Dev-C++ bedzie podobnie.

 

[EDIT]

W dev debugger albo nie działa, albo działa kiczowato.

Dokladnie. Tez mialem sporo problemow z debuggerem w Dev-C++ i nie pamietam czy wkoncu udalo mi go sie skonfigurowac. Code::Blocks jest dobra alternatywa dla Dev-C++. Jak sciagniesz razem z MinGW to bedziesz mial kompilator i debugger od razu skonfigurowany i dzialajacy. Po przesiadce z Deva na Codeblocks ciezko sie przyzwyczaic do wrazenia balaganu na ekranie ale kilka chwil uzywania i okazuje sie byc lepszy od deva. imho

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
o w opcjach projektu wybierz aby kompilowal do Debug. Wtedy skompiluj i uruchom i gdy bedzie jakis blad to w okienku na dole wyskocza bledy razem z numerem lini gdzie to sie stalo oraz w oknie z kodem bedziesz mial pokazana linijke w ktorej wyskoczyl blad. Akurat w Code::Blocks aby uruchomic debuggera trzeba skompilowac do Debug i z menu Debug wybrac Start.

Lol, to o czym mówisz nie ma nic wspólnego z debugowaniem, to zwykła kompilacja podczas której wykrywane są błędy składniowe. Błędy podczas uruchomienia programu (takie jak przekroczenie zakresu tablicy, czy próba użycia obiekty ze wskaźnika o wartości null) są wykrywane niezależnie od tego, czy IDE ustawione jest na debug, czy na release, ale tylko w części przypadków podaje wtedy linike w której wystąpił błąd. I to nie jest debugowanie, tylko zwykłe wykrywanie błędów... debugowanie to właśnie przeglądanie krokowe, kontrola wartości zmiennych itd.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Lol, to o czym mówisz nie ma nic wspólnego z debugowaniem, to zwykła kompilacja podczas której wykrywane są błędy składniowe. Błędy podczas uruchomienia programu (takie jak przekroczenie zakresu tablicy, czy próba użycia obiekty ze wskaźnika o wartości null) są wykrywane niezależnie od tego, czy IDE ustawione jest na debug, czy na release, ale tylko w części przypadków podaje wtedy linike w której wystąpił błąd. I to nie jest debugowanie, tylko zwykłe wykrywanie błędów... debugowanie to właśnie przeglądanie krokowe, kontrola wartości zmiennych itd.

 

A to przepraszam, pomylilem sie. Jezeli podczas kompilacji zostana wykryte jakies bledy to jest to dzieki pracy kompilatora. Ale program sie nie skompiluje. Po poprawnie zakonczonej kompilacji gdy juz program uruchomisz i wystapia jakies bledy to program najnormalniej sie wysypie. Moze to zalezy od IDE i srodowiska ale np. w takim LabWindows jezeli podczas dzialania programu wystapi blad kompilowales do Release to sie program wysypie a jak kompilowales do Debug to przy wysypywaniu sie zostanie zwrocony numer bledu i nr. linijki w ktorej wystapil. W Codeblocks jest inaczej. Ale chyba masz racje. W takim przypadku debugger nie wkraczal do akcji.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
A to przepraszam, pomylilem sie. Jezeli podczas kompilacji zostana wykryte jakies bledy to jest to dzieki pracy kompilatora. Ale program sie nie skompiluje. Po poprawnie zakonczonej kompilacji gdy juz program uruchomisz i wystapia jakies bledy to program najnormalniej sie wysypie. Moze to zalezy od IDE i srodowiska ale np. w takim LabWindows jezeli podczas dzialania programu wystapi blad kompilowales do Release to sie program wysypie a jak kompilowales do Debug to przy wysypywaniu sie zostanie zwrocony numer bledu i nr. linijki w ktorej wystapil. W Codeblocks jest inaczej. Ale chyba masz racje. W takim przypadku debugger nie wkraczal do akcji.

W .net (nawet w c++) czy Delphi jest tak, że błąd i związana z nim linika pojawia się nawet w release, ale od tego jest menaged żeby świetnie wykrywało błędy nawet gdy program jest już w wersji produkcyjnej :) Zmiana na release powoduje, że przy debugowaniu (którego można dokonywać) czasem kilka instrukcji jest pomijanych, nie można oglądać zawartości niektórych zmiennych itd. No i oczywiście wynikowy kod jest szybszy i mniejszy. Ale w czystym c++ faktycznie debugowanie może nie być możliwe jeśli się ustawi na release.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A instalowales z MinGW? Ze stronki C::B mozna sciagnac samego Codeblocks oraz codeblocks razem z MinGW.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

no to pewnie mam bez MinGW... No ale doszłem po cout'ach, że błąd powoduje fragment podany w pierwszym poście..... Gdzieś sie jeszcze iteruje holerstwo....

 

Chyba iteruje się, gdy na końcu stoi inny znak niż litera.... I wtedy przekracza indeks... Jak pozbyć się tego zjawiska ?

 

 

Zainstalowałem wersję z MinGW i też nie działa !!!

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...