[C++] Kilka pytań


(Barokim) #1

Witam. Jestem początkującym (czyt. zielonym jak kosmita) programistą c++. Próbuje załapać, o co w tym wszystkim chodzi, poznałem podstawy podstaw, i przy pisaniu bardzo złożonego jak dla mnie programu, napotkałem pewien problem. Nie wiem jak pewną komendę zapisać.

include

int main()

{

std::cout << "Ile masz lat???";

int Wiek; std::cin >> Wiek;

if (Wiek >= 49) std::cout << "Pewnie chciałbyś mieć mniej co???";

else std::cout << "Nie aż tak żle";

char W;

if (Wiek >= 49) std::cin >> W;

if (W = "tak") std::cout << "Wiedziałem";

char lol; std::cin >> lol;

}

O właśnie, ta pogrubiona linijka, nie wiem jak to zapisać, żeby program załapał o co biega (swoją drogą tuman z niego xD). Chce mu tu wytłumaczyć, że jeśli odpowiedź na pytanie W , będzie brzmiało tak, to ma wyświetlić napis "Wiedziałem". A to pytanie na końcu, to żeby napis "wiedziałem" od razu nie zniknął. I tu nasuwa się drugie pytanie. Czy jest jakiś sposób, by tekst w Windowsie od razu nie znikał, tylko taki bardziej profesjonalny...


(Pszybiak) #2

Po pierwsze, w tej pogrubionej linijce jest błąd, bo w nawiasie nie masz operatora porównania tylko przypisania. Po drugie porównujesz znak char do napisu “tak”. Jeżeli wczytujesz pojedynczy znak, to zrób tak:

if (W == ‘tak’) std:cout << “Wiedziałem”; // z klawiatury pobierasz tylko jeden znak

lub tak

char *W;

if (strcmp(W, “tak”)) std:cout << “Wiedziałem”; // W jest w tym przykładzie tablicą znaków

Oczywiście trzeba jeszcze w tym przypadku dodać na początek

#include


(Jedras121) #3

Char przechowuje tylko jeden znak, więć tam na pewno nie zmieści się odpowiedź “tak”. Musisz zrobić np. tablicę znaków char W[20];

A żeby zatrzymać program możesz np. dołączyć bibliotekę i na końcu programu wywołać funkcję getch();


(Trance) #4

można tak : na początku dodajesz

#include

a na końcu przed } getch();

//--------------------------------

i tak na krupczatek nauki programowania radze dodawać do kodu

using namespace std;

bo nie ma sensu w tego typu programach pisać za każdym razem std::


(S Karaim) #5

a zeby tekst ci nie znikal musisz dopisac na koncu kodu zawsze system(“pause”);


(Zenstr) #6

Witam.

Skoro ma iostream to wystarczy dodać przestrzeń nazw std i nie potrzeba tam żadnej conio.

Zatrzymasz wtedy program tak:

cin.get();

,albo lepiej czytaj tutaj http://www.coderscity.net/sutra126304.html

Pozdrawiam.


(Barokim) #7

Mało rozumiem z tego co mówicie, ale ująłem to tak:

#include

int main()

{

std::cout << “Ile masz lat???”;

int Wiek; std::cin >> Wiek;

if (Wiek >= 49) std::cout << “Pewnie chciałbyś mieć mniej co???”;

else std::cout << “Nie aż tak żle”;

char *W;

if (Wiek >= 49) std::cin >> W;

if (strcmp(W, “tak”)) std::cout << “Wiedziałem”;

(“pause”);

}

No i kiedy odpowiadam na pierwsze pytanie, wszystko jest ok. Jednak po odpowiedzi na drugie, program się wyłącza, i pojawia się okno wysyłania raportu o błędach (mój pierwszy error, jak miło;) Prócz zaradzenia temu problemowi, nasunęło mi się jeszcze kilka pytań, a mianowicie:

-co oznacza komenda strcmp

-jeśli się dobrze orientuje (pewnie nie, ale co tam) komenda include , dodaje do naszego kodu używane w nim biblioteki. więc ja biblioteki “conio”, przynajmniej tak mi się wydaje nie mam. Skąd mam ją wziąć (a może mam, posiadam Dev C++, w wersji 5.xxxx beta PL)

-czy znak * przed mnoży char, by mógł on zawierać wiele znaków

-i wytłumaczcie mi tak na chłopski rozum, jaką komendę i gdzie ją umieścić, ażeby nie musieć ciągle pisać std::

-i dlaczego (co mnie najbardziej nurtuje), W jest po przecinku (w tej feralnej linijce)


(Sawyer47) #8

Poczytaj najpierw jakiś kurs C++. Jak widać próby programowania bez znajomości tematu są bezcelowe. Jeśli naprawdę chcesz się nauczyć C++ to zainteresuj się jakąś książką. Bo co z tego, że ktoś Ci wytłumaczy co masz źle, nawet napisze jak powinno być dobrze, skoro i tak tego nie zrozumiesz?


(Barokim) #9

Niby racja, zapisze się do jakiejś biblioteki, i wypożyczę (bo w szkolnej czea oddać szybko…


(Trance) #10

moim zdaniem jeżeli chcesz się nauczyć programować to wypożyczanie książki ze szkoły nie jest najlepszym pomysłem, lepiej kupić sobie jakąś (polecam Symfonię C++) i spokojnie czytając przerabiać sobie po kolei przykłady z książki, poza tym na pewno po pierwszym przeczytaniu książki wszystkiego od razu nie zapamiętasz i na pewno trzeba będzie wrócić ponownie do pewnych rzeczy


(Zenstr) #11

-strcmp to funkcja która służy do porównywania łańcuchów znakowych,tak jak

string W;

cin>>W;

if(W=="tak")cout<<"Wiedzialem\n";

-więcej w literaturze.

-ja jeszcze mam starą conio,Ty może masz conio.h-więcej w literaturze

Nie! !!


([alex]) #12

To dopiero niedopuszczalne !!


(Zenstr) #13

Wstaw to w ten mój kod :smiley: .

Tuuuutaj,zupełna klapa :stuck_out_tongue:


(Zulowski) #14

http://www.allegro.pl/item630248151_sym … lka_0.html

http://drops.pl/index.php?search=1&page … mit=Szukaj

Kup sobie, to rozwieje twoje pytania :slight_smile:


(Zenstr) #15

W sklepie internetowym Helion jest bdb. podręcznik dla początkujących i nie tylko: "Stephen Prata -Sztuka programowania ",1300 stron i jedyne 100 zł. :slight_smile:

Co do kodu powyżej,to może zamiast tablicy char użyć string-a.

Będzie może lepiej tutaj. :slight_smile:

#include 

int main()

{

using namespace std;

cout << "Ile masz lat???\n";

int Wiek = 0;


string W;


cin >> Wiek;

if (Wiek >= 49)

{

  cout << "Pewnie chcialbys miec mniej co???\n";

  cin>>W;


  if(!strcmp(W.c_str(),"tak"))cout<<"Wiedzialem\n";

  if(!strcmp(W.c_str(),"nie"))cout<< "Coooo!\n";

}

else

   {

  cout << "Nie az tak zle\n";

   }

system("pause");

return 0;

}

(Barokim) #16

Dobra, mniej więcej wiem już o co w tym chodzi. Staram się o 6 z informatyki… Uznałem, że lepszym pomysłem będzie zrobienie kilku takich małych kalkulatorków… Udało się, prawie wszystkie zrobione. Jednak jeśli będzie mi nauczyciel kazał wytłumaczyć, co jeden wpis oznacza, to nie będę wiedział co powiedzieć. Mianowicie w tym kodzie:

#include

int main()

{

int nLiczba1;

std::cout << "Podaj dlugosc podstawy rownolegloboku: ";

std::cin >> nLiczba1;

int nLiczba2;

std::cout << "Podaj wysokosc rownolegloboku: ";

std::cin >> nLiczba2;

int nWynik = nLiczba1 * nLiczba2;

std::cout << nLiczba1 << " * " << nLiczba2 << " = " << nWynik;

system(“pause”);

}

Mianowicie, co oznacza literka n, przed wszystkimi "liczbami.


(Sawyer47) #17

Absolutnie nic, to tylko nazwa zmiennej… hmm chyba jednak nie zasługujesz na to 6, skoro nie potrafisz objaśnić niczego?


(Barokim) #18

nr47 po pierwsze, rozumiem wszystko w tym kodzie (z tą n-ką sam się domyśliłem, próbując zapisać podobny kod bez niej). Dlatego, że kodu na poprzedniej stronie w pewnym stopniu nie rozumiem, wmyśliłem coś innego. Może prostszego, ale za to bardziej pożytecznego, pomysłowego oraz praktycznego… Mój nauczyciel uzna, czy zasługuje na 6…


(Zenstr) #19

Wywal niepotrzebną zmienną nWynik. :smiley:

Przypisz zmiennym nLiczba1 i nLiczba2 wartości : 0 . :smiley:

//---------------------------------------------------------------------------

#include


int main()

{

int nLiczba1 =0,nLiczba2 = 0;

std::cout <<"Podaj dlugosc podstawy rownolegloboku i jego wysokosc "

"oddzielajac liczby spacja ";


std::cin >> nLiczba1>>nLiczba2;

std::cout << nLiczba1 << " * " << nLiczba2 << " = " << nLiczba1 * nLiczba2;

std::system("pause");

return 0;

}

//---------------------------------------------------------------------------

(Barokim) #20

“Przypisz zmiennym nLiczba1 i nLiczba2 wartości : 0” A po co (pytam się jak jakieś małe dziecko xD)