Rozpoczynam zabawę z programowaniem w C++. I na początku trafiłem na problem którego nie mogę sam za bardzo rozgryźć. Napisałem taki kod:
#include <iostream>
#include <conio.h>
using namespace std;
int main()
int nliczba;
cout <<"Podaj liczbe: ";
cin >> nliczba;
if (nliczba=0) cout << "Idealnie";
if (nliczba>0) cout <<"Za dużo!";
if (nliczba<0) cout <<"Za mało!";
getch();
Wszystko się pięknie kompiluje ale jak odpalam program to po wpisaniu dowolnej liczby i kliknięciu enter nic się nie dzieje. Popatrzyłem trochę w internecie i dalej nic. Gdzie tkwi błąd?
nliczba=0??? A może nliczba==0??? I też dziwne nawiasy podajesz???
Poprawnie to:
#include <iostream>
#include <conio.h>
using namespace std;
int main()
int nliczba;
cout <<"Podaj liczbe: ";
cin >> nliczba;
if (nliczba==0) cout << "Idealnie";
if (nliczba>0) cout << "Za dużo!";
if (nliczba<0) cout << "Za mało!";
getch();
Chociaż to using namespace std też nie powinno być bo to za krótki kod. Oczywiście może to być i nie jest błędem ale tak się nie robi bo tylko zwiększasz tym pojemność pliku wykonywalnego.
Inna sprawa korzystasz z biblioteki języka C. To chcesz się uczyć czystego C++ a czy mieszanki?
Po co mieszasz człowiekowi w głowie zapisem inline i rzucaniem się o namespace, jak sam pisze, że dopiero zaczyna!
mati321123 --
Błąd jaki popełniłeś, to jedynie tyle, że znak "=" przypisuje wartość. Np. kod:
int liczba;
liczba = 10;
cout<<liczba;
wyświetli nam 10.
Jeśli dokonujemy porównania, to używamy operatora "==" (dwa razy znak równości). Zwraca on prawdę jeśli zachodzi równość, a fałsz jeśli nie zachodzi.
Ty użyłeś błędnego operatora. Więc IFy nie działają ponieważ w pierwszym IFie zamiast dokonać porównania przypisałeś swojej zmiennej wartość zero. Co jest równoznaczne fałszowi. Dokładnie program rozumuje tak: wykonaj operacje w nawiasie IF (czyli u Ciebie: przypisz zmiennej wartość zero), a następnie sprawdź jaka wartość jest w IF. I ta wartość zero w tej zmiennej cały czas siedzi. Nie działają więc też następne IFy. Bo zero nie jest przecież ani mniejsze, ani większe od zero.
Możesz to łatwo sprawdzić zmieniając ich kolejność. Jeśli na górę wyniesiesz jeden z IFów z nierównością, to jeśli podasz liczbę spełniającą tę nierówność, komunikat wyświetli Ci się prawidłowo. Dopiero komunikat z tym błędnym przypisaniem (zamiast porównania) i następujące po nim, nie będą Ci się wyświetlać.
Możesz też spróbować co się stanie, jak zmienisz wyłącznie swoje nierówności na: <= (mniejsze lub równe) i >= (większe lub równe).
Sprawdź też co by się stało, gdybyś zachował swój błąd, ale zamiast zera wpisał np. 10.
Ogólnie jest tak, że program niektóre wartości, kiedy nie dostaje po prostu fałszu lub prawdy w instrukcji warunkowej, interpretuje jako fałsz albo prawdę, próbuje je sobie w ten sposób przetłumaczyć. W podręczniku będziesz miał to opisane, jak dokładnie to wygląda.
@up A po to aby już od podstaw takie rzeczy już wiedział!!!
Jak będzie się uczył inaczej to będzie potem to nawyk i się nie oduczy go szybko. I śmiem nawet powiedzieć, że kod też powinien już normalnie układać (chodzi mi o wcięcia), bo jak nie zrobi tego z początku to potem będzie mu coraz ciężej .
Inna sprawa korzystasz z biblioteki języka C. To chcesz się uczyć czystego C++ a czy mieszanki?
Gdzieniegdzie uczą, żeby używać getch() w aplikacjach konsolowych, żeby uniknąć automatycznego zamknięcia konsoli po zakończeniu działania programu. Coś jak system("PAUSE"), ale nie wywali się na systemach innych niż Windows.
W C: getch(), a w C++ cin.get(). C++ już korzysta z obiektów.
Tyle, że gość pisze swój pierwszy programik w stylu hello world. Co Wy o obiektach. Dajcie człowiekowi spokój, na Boga.
Nieprawda, że wszystko trzeba od razu. Wręcz nie można. Jak się poznaje np. inline, to się z tego automatycznie zaczyna korzystać, żeby się nie męczyć w pisaniu. Ale nie ma najmniejszego sensu zawracać tym głowę komuś na samym początku.
Na początku najlepiej jest, żeby człowiek, jak popełnił błąd, zrozumiał dlaczego daje on taki, a nie inny efekt w całości kodu. To umożliwia głębsze zrozumienie pewnych rzeczy.