Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Nie da się zmienić wartości INT


Gość Vosly_

Rekomendowane odpowiedzi

Opublikowano

Witam wszystkich mam problem z prostą rzeczą której nie mogę rozwiązać... otóż nie mogę zmienić wartości INT z 0 na 1

 

Kod:

#include "stdafx.h"

#include <iostream>  
#include <windows.h> 
#include <iostream>
#include <conio.h>

using namespace std;

void Opcje(int launched);

int main(){

int launched = 0;

while(true){

sleep(100);

Opcje(launched);

if(launched == 1){ cout << "Działa..." << endl; }

}

return 0;
}

void Opcje(int launched){

unsigned char znak;

znak = _getch();

if(znak == 'w'){
launched = 1;
}

}

Za pomoc dam 10x LIKE

Opublikowano

Przy przekazywaniu argumentów przez wartość tworzona jest kopia zmiennej, to co dostaje funkcja to nie jest oryginał. Tak tego nie zrobisz, musisz albo użyć zmiennych globalnych(zasadniczo każdy to odradzi, bo wybitnie dobrym rozwiązaniem to one nie są) albo użyć wskaźników(jak @GrAvItY1).

Opublikowano

albo użyć zmiennych globalnych(zasadniczo każdy to odradzi

 

A dlaczego? Napisałeś w moim temacie, że używanie wskaźników do lekkich typów to kretyństwo...

Więc jak zrobić funkcję która potrzebuje z 20intów, jak nie przez wskaźniki i nie przez zmienne globalne?

Opublikowano

W prostych projektach to nie przeszkadza ale robienie zmiennych globalnych w dużych projektach to kretyństwo bo prowadzi do dużych niezrozumiałych błędów . Multiple definition of , unresolved external itp. Dlatego lepsze są zmienne lokalne i nie rozumiem czemu używasz zmiennych globalnych jak to największe zło.

 

 

Więc jak zrobić funkcję która potrzebuje z 20intów, jak nie przez wskaźniki i nie przez zmienne globalne?

Kontener ? std::vector , std::list, std::deque itp ?

nostaleh.png
Opublikowano

A dlaczego? Napisałeś w moim temacie, że używanie wskaźników do lekkich typów to kretyństwo...

Więc jak zrobić funkcję która potrzebuje z 20intów, jak nie przez wskaźniki i nie przez zmienne globalne?

W tamtym temacie szło o optymalizację - miałem na myśli że kretyństwem jest przekazywanie lekkich typów poprzez wskaźniki w celu uniknięcia niepotrzebnego kopiowania.

 

Co do zła zmiennych globalnych - zrobi się wtedy spory bałagan w kodzie, niewygodnie będzie go używać itp..

Opublikowano

Zrobiłem

void Opcja(int & CosTam);

void Opcja(int & CosTam){
CosTam = 1;
}

I nie działa ;/

Opublikowano

Mi normalnie działa. W ogóle z tego co ja wiem, nie ma takiej funkcji jak

sleep();
tylko
Sleep();
Opublikowano

Pisałem to na szybko więc nie zwracałem uwagi na wielkość liter ale to nie działa ;x

Opublikowano

Ale co Ci nie działa? Jakie są błędy, daj normalny kod, a nie taki "na szybko".

Opublikowano

­W c++ jak i w wiekszosciach jezykow argumenty przekazuje sie jako wartosci http://www.learncpp.com/cpp-tutorial/72-passing-arguments-by-value/

Co opatologicznie oznacza, ze gdy dokonasz zmiany argumentu w funkcji jak ty to robisz, to poza ta funkcja ta wartosc nie ulegnie zmianie.

Aby zmienic dany argument typu int musisz posluzyc sie wskaznikiem

http://courses.washington.edu/css342/zander/css332/passby.html

 

Czyli w twoim wypadku:

void Opcje(int& launched);

void Opcje(int& launched) {
	unsigned char znak;
	znak = _getch();
	if (znak == 'w') {
		launched = 1;
	}
}
I ni godej ze ni dziala http://goo.gl/aAFsoC

o8HfXuR.png

CAPSLOCK TEAM - LEPIEJ WIDOCZNI WIDOCZNIE LEPSI

Cała prawda o LittleBlack

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...