Forum Gry Hobby Sprzęt Rozmawiamy Archiwum Regulamin

Forum: Problem z podstawami C++

13.09.2013 20:48
1
mati321123
41
Pretorianin

Problem z podstawami C++

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?

13.09.2013 20:50
2
odpowiedz
zanonimizowany626335
17
Generał

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?

13.09.2013 22:43
3
odpowiedz
zanonimizowany279646
53
Legend

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.

13.09.2013 22:47
4
odpowiedz
zanonimizowany626335
17
Generał

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

13.09.2013 22:47
5
odpowiedz
zanonimizowany861943
46
Generał

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.

13.09.2013 22:52
6
odpowiedz
zanonimizowany626335
17
Generał

W C: getch(), a w C++ cin.get(). C++ już korzysta z obiektów.

13.09.2013 22:54
😊
7
odpowiedz
zanonimizowany279646
53
Legend

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.

Forum: Problem z podstawami C++