Strona 1 z 2
[C++] Hello world
: 30 mar 2014, o 17:34
autor: Poszukujaca
Dopiero zaczynam przygodę z programowaniem w języku c++. Zamierzam uczyć się z książki ,,Symfonia c++".
Dziś próbuję napisać pierwszy program, który będzie tylko wyświetlał konkretny tekst na ekranie. Posługuję się ,,Dev c++". Tworzę plik źródłowy i wpisuję:
Kod: Zaznacz cały
#include<iostream.h>
main()
{
cout<<"tekst";
}
Program nie chce się skompilować. Proszę mi powiedzieć, co jest źle.
[C++] Hello world
: 30 mar 2014, o 19:22
autor: Adwin_
Odpowiedź + poprawny kod: .
Upewnij się, że masz najnowszą wersję Symfonii.
[C++] Hello world
: 30 mar 2014, o 19:23
autor: Althorion
O tym, co jest źle, powiedział Ci już kompilator, wystarczyło go posłuchać. Ja Ci natomiast powiem, dlaczego jest źle.
A jest źle dlatego, że korzystasz z książki, która została wydana przed standaryzacją C++. Tak można było pisać dawno temu (przez 1998 rokiem), kiedy C++ się dopiero wykluwał i każdy do niego podchodził, jak chciał. A potem zdecydowano się na jedno, wspólne rozwiązanie — i tak na przykład plik nagłówkowy ze strumieniami wejścia-wyjścia to teraz iostream, obiekty w niej zawarte są w przestrzeni nazw std, zaś funkcja main() musi być typu int (więc i musi zwrócić wartość).
Musisz albo postarać się o nowszą książkę, albo bardzo stary kompilator.
A jak już o kompilatorze mowa — znajdź sobie coś bardziej współczesnego od Dev C++. Nawet jeśli miałby to być Microsoft Visual Studio (wersja Express jest darmowa). Chociaż najlepiej byłoby skorzystać z g++ dostępnego na Windowsie na przykład w mingw i jakiegoś IDE, np. Eclipse'a.
[C++] Hello world
: 30 mar 2014, o 21:30
autor: Poszukujaca
Dziękuję za precyzyjne wyjaśnienie.
Mam książkę wydaną w 1999 roku, więc to już wszystko wyjaśnia.
A jak mogę ten program napisać bez użycia funkcji?
[C++] Hello world
: 30 mar 2014, o 21:53
autor: Althorion
Funkcja int main(...) musi być w każdym programie napisanym w C++. Będzie ona wykonana zaraz po inicjalizacji zmiennych globalnych, a jej zakończenie wyłączy program.
[C++] Hello world
: 30 mar 2014, o 21:59
autor: Poszukujaca
Na pewno? Jeszcze nie bardzo rozumeim czym jest funkcja..
My na zajęciach piszemy na razie tylko programy bez funkcji, np rozwiązywanie równania kwadratowego piszemy tak:
Kod: Zaznacz cały
#include<stdio.h>
#include<conio.h>
#include<math.h>
main()
{int a,b,c;// int oznacza liczby całkowite
printf ("Podaj współczynniki a,b,c:
"), //przejście do nowej linii
scanf("%d",&a),
scanf("%d%d",&b,&c),
scanf("%dx^2+%dx+%d=0", a,b,c);
if(a!=0)
{ int delta=b*b-4*a*c;
if(delta>=0)
{
if(delta==0)
{
printf("
x0=%f
", (float) (-b)/(2*a));
}
else
{
printf("
x1=%f
" "
x2=%f
", (float)(-b-sqrt(delta))/(2*a), (float) (-b+sqrt(delta))/(2*a));
}
}
else
printf("Brak pierwiastków");
}
else //a=0
{
if(b=0)
{
if(c=0)
{
printf("Nieskończenie wiele rozwiązań");
}
else
{
printf("Brak rozwiązań");
}
}
getch();
}
[C++] Hello world
: 30 mar 2014, o 22:15
autor: Althorion
A teraz przyjrzyj się czwartej linijce Twojego programu. Po czym zapytaj się prowadzącego przedmiot, dlaczego prowadzi programowanie wg własnego widzimisię, a nie któregokolwiek ze standardów, których dla C++ powstały cztery: ISO/IEC 14882:1998, ISO/IEC 14882:2003, ISO/IEC TR 19768:2007, ISO/IEC 14882:2011 (liczba po dwukropku oznacza jednocześnie rok przyjęcia standardu).
Bo ja jeszcze umiem pojąć, dlaczego nie wpaja się uczniom najnowszej możliwej wiedzy. Ale tego, dlaczego uczy się informacji, które od szesnastu lat są nieprawdziwe, już zrozumieć ani wytłumaczyć nie potrafię. Szczególnie że w tym przypadku uniemożliwia im to samodzielną naukę, wszędzie bowiem znajdziesz już w miarę aktualne informacje. To tak, jakby na geografii uczyli Cię o Czechosłowacji.
Ponadto uważam, chociaż to już jest bardziej moja prywatna opinia niż Wiedza Objawiona, że używanie conio.h to zbrodnia — jest to biblioteka nieustandaryzowana i nieprzenośna. Jeszcze żeby jej użycie miało sens, ale nie… Ten sam efekt praktyczny (oczekiwanie na przyjęcie jakiegokolwiek wejścia) da nam funkcja cin.get() z biblioteki standardowej.
[C++] Hello world
: 30 mar 2014, o 23:31
autor: Dasio11
A jeśli ktoś chce działanie typu: "press any key to continue" ?
[C++] Hello world
: 31 mar 2014, o 00:39
autor: MadJack
W sumie nie dziwię się ludziom, że nie lubią programowania, jeśli jest ono tak uczone. Więcej z tego szkody niż pożytku.
Wg mnie na początek Eclipse czy Visual Studio to trochę za duże środowiska, mnóstwo klikania i plików, które na początku nic nie mówią. Z drugiej strony Dev jest przestarzały, ekstremalnie niewygodny i nie mam pojęcia, dlaczego tylu prowadzących poleca w nim pisać na początku. Osobiście uczyłem się w Code::Blocks i polecam: jest bardzo wygodny, czytelny i minimalistyczny na tyle, że jest dobry do nauki (w sumie żałuję, że nie ma zbyt dobrego wspierania większych projektów, bo przyjemniej mi się w nim pisze niż w Eclipse, NetBeans czy Visual Studio).
[C++] Hello world
: 31 mar 2014, o 00:48
autor: Althorion
Dasio11 pisze:A jeśli ktoś chce działanie typu: "press any key to continue" ?
I w ogóle nie interesuje go przenośność? To na Windowsie można wywołać polecenie
pause, które da dokładnie taki wynik — do tego celu wykorzystując funkcję
system z biblioteki standardowej. W przeciwnym wypadku wydrukować na konsoli ww. tekst i poczekać na naciśnięcie czegokolwiek, co jest jak najbardziej wykonywalne przy użyciu biblioteki standardowej.
[C++] Hello world
: 31 mar 2014, o 11:26
autor: Poszukujaca
Powiem szczerze, że przeraża mnie to wszystko co na razie tyczy się programowania.. Jestem zielona i jeśli sama nie wezmę sprawy w swoje ręce - nie zacznę uczyć się z naprawdę rzetelnych i dobrych źródeł, to na moich zajęciach niczego się nie nauczę..
Myślałam tez o jakimś kursie internetowym. Słyszałam, że są takie. Ktoś może coś polecić? Cokolwiek?
[C++] Hello world
: 31 mar 2014, o 21:57
autor: Dasio11
Althorion pisze:I w ogóle nie interesuje go przenośność? To na Windowsie można wywołać polecenie pause, które da dokładnie taki wynik — do tego celu wykorzystując funkcję system z biblioteki standardowej. W przeciwnym wypadku wydrukować na konsoli ww. tekst i poczekać na naciśnięcie czegokolwiek, co jest jak najbardziej wykonywalne przy użyciu biblioteki standardowej.
Przenośność go bardzo interesuje, ale drukowanie tekstu do konsoli - nie. Program ma poczekać na naciśnięcie dowolnego przycisku, nie robiąc nic poza tym. Przyznam, że od dawna interesuje mnie taka możliwość, ale nie znam żadnej funkcji poza getch(), która daje ten efekt. W szczególności, wywołanie cin.get() powoduje, że można wprowadzić wiele znaków, które są drukowane na ekranie, i jeszcze trzeba potwierdzać enterem.
[C++] Hello world
: 31 mar 2014, o 22:18
autor: Althorion
Jeśli piszesz program okienkowy, to użyta biblioteka graficzna zapewne będzie miała taką funkcję. Dla programów konsolowych pisanych przy użyciu ncurses to też nie problem.
Znacznie gorzej jak chcemy programować bez tego. Samo
mówi, po wylistowaniu kilku proponowanych rozwiązań, że „under other operating systems, you're on your own”. Ogólnie rzecz jest nietrywialna — trzeba jakoś przekonać system operacyjny, żeby nam łaskawie pozwolił się dobrać do klawiatury w sposób bezpośredni, gdyż normalnie program dostanie z terminala wejście dopiero po pacnięciu Entera. Ncurses obchodzi to przejmując terminal, ale jeśli nie piszesz aplikacji terminalowej, to tej wygody mieć nie będziesz. Czyli wracamy na początek, do wybrania sobie funkcji z biblioteki graficznej, z której korzystasz.
Bo jeśli nie, to nagle musisz się dowiadywać, jak możesz przejąć klawiaturę dla swojego programu. A to nigdy nie jest przenośne.
[C++] Hello world
: 5 kwie 2014, o 21:04
autor: kalwi
Poszukujaca pisze:
Myślałam tez o jakimś kursie internetowym. Słyszałam, że są takie. Ktoś może coś polecić? Cokolwiek?
Myślę, że ten kurs jest bardzo konkretny:
A na uzupełnienie informacji:
Są one dość aktualne, do nauki na początek powinny starczyć
[C++] Hello world
: 5 kwie 2014, o 22:19
autor: Poszukujaca
Dziękuje
Tak się zastanawiam czy język, w którym piszemy to właściwie c++ czy c. Bo jeśli używam bibliotek
to chyba jest to język c.