Eljárás (void) probléma c-ben (nem deklarált változó)? És breakkel kilépés ciklusból?
Szóval ha írok eljárásokat a main függvény elé,akkor miért panaszkodik nem deklarált változókra mikor azok deklarálva lesznek a mainben és csak utána vannak meghívva az eljárások?
A másik meg hogy hogy lehet ciklusból kilépni,ha abban van egy elágazás?
pl van egy while ciklusom abban pedig egy if(valami) és ha a valami teljesül akkor akarok csak kilépni a cikusból
"break statement not within a loop or switch"
> ha írok eljárásokat a main függvény elé,akkor miért panaszkodik nem deklarált változókra
Mutass konkrét kódot és konkrét hibaüzenetet.
> hogy lehet ciklusból kilépni,ha abban van egy elágazás?
Minden extra trükk nélkül beírsz egy break-et. Működnie kell a cikluson belül. Kapcsosokat nem felejtetted el a ciklus törzse körül?
#include <stdio.h>
void abc (){
if(a=15) break;
}
int main(){
int a=0;
for(a=0;a<20;a++){
printf("%d\n",a);
abc();
}
return 0;
}
egy elég egyszerű példa,erre is bedob 2 hibát
-'a' undeclared
-break statement not within a loop or switch
Először is az abc egy függvény, aminek saját változói vannak. Az abc függvényben pedig nincsen a nevű változó, így nem is tudja megmondani, hogy az 15-e.
Gondolom azt szeretted volna, hogy amit a main-ben megadsz a-t, azt nézze meg az abc. Ehhez az kell, hogy átírod a függvényt:
void abc (int a){
//akármi
}
de ez sem jó szerintem, mert te azt akarod nézni, hogy 15-e vagy sem, tehát neked nem void, hanem int típusú függvény kell.
breaket ciklusban használunk, nem függvényben, neked return kell oda.
Azonban mivel úgysem kezdesz semmit az a-val, így nincs értelme a függvénynek sem.
Esetleg az lehetne, hogy:
int abc (int a){
if(a=15) return 1;
return 0;
}
de mivel rájöttem, mit akarsz írni, a megoldás:
#include <stdio.h>
int tizenot_e(int szam){
if(szam=15) return 1;
return 0;
}
int main(){
int a=0;
for(a=0;a<20;a++){
printf("%d\n",a);
if(tizenot_e(a))
break;
}
return 0;
}
igazából az lenne a célom,hogy külön megírok egy programrészt,aztán azt meghívom a mainben,paraméterek nem kellenek
gondoltam így átláthatóbb a main
pl egy ilyet:
nem akarok belerakni,hanem a mainben csak annyit akarok hogy if(valami) akkor hívja meg ezt
Ahogy elnézem, a fogalomzavar (legalábbis az egyik) onnan ered, hogy nem érted, pontosan mit is jelent a függvény meghívása. A függvény nem makró, az, hogy valahol meghívsz egy függvényt nem azt jelenti, hogy a függvény definíciója kerek perec bemásolódik a hívás helyére, és úgy fog viselkedni, mintha eleve oda írtad volna. Ezért nem működik a break-ed, mert az nem ciklusban van, hanem egy tök más függvényben. Amikor egy függvényt meghívsz, akkor az lefut, de külön blokkban, csak azt látja, amit a függvényben, vagy azon kívül, globálisan már deklaráltál.
Azt se tessék elfelejteni, hogy a fordító sorról sorra halad, így hiába hívod meg a függvényedet később, mint egy olyan kifejezést, változót, akármit, amit a függvényedben is használsz, amikor a fordító a függvény definícióján végighalad, fenn fog akadni, hogy ez vagy az a kifejezés nem volt sehol deklarálva. Lehet, hogy később van, de ő sorban halad.
"paraméterek nem kellenek gondoltam így átláthatóbb a main"
Persze, minek is azok, legyen minden változó globális, attól biztos átlátható lesz.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!