Mi történik mikor két változót egyenlővé teszek C-ben?
Írtam egy szám beolvasást ami mindaddig működik amíg nem dolgozok a c változóval, amibe beolvastam az inputot. Nem tudok rájönni miért van így. A választ előre is köszönöm
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m;
int n,c;
m = getchar();
while (m != '\n') {
if ((m >= 48) && (m <= 57)) {
n = m - 48;
} else {return 0;}
c = c*10+n;
m = getchar();
}
printf("%d\n",c);
int i;
i = c;/*ha az értékadást kiveszem jó*/
printf("%d\n",i);
return 0;
}
Mert ha nem dolgozol vele mitől romlana el mégis?
Mintha azt kérdeznéd, hogy nem érted mitől hangos a porszívó, mikor csak akkor csinálja, amikor bekapcsolod.
" Egy kicsit ködös miért működik így, hogy csak akkor bukik ki ha dolgozni akarok az értékkel."
Vannak nyelvek, amleyek a változók deklarációjánál adnak azoknak kezdőértéket, vannak amelyek meg nem (utóbbi a jobb).
Amikor változót deklarálsz, akkor csak a helyét foglalod le a memóriában. Azonban a változó nem c vagy akármi, hanem egy szám, aminek csak a neve c (vagy akármi), az is csak a forráskódban.
Ha te nem adsz kezdőértéket (jelen esetben számot) neki, akkor mivel számoljon a processzor? A semmivel?
„ i = c; /*ha az értékadást kiveszem, jó*/ ”
Ha szereted a beállítatlan változókat, akkor csudajó, mert az i is az lesz, lehet izgulni, mit ír ki a printf(). Egyébként viszont gyanúm, hogy valami véletlen jelenséget félreértelmezel. A beolvasás előtt adjál c-nek 0 értéket, és a problémának ez a része meg van oldva. Lehet pl. c túlcsordulásának megakadályozásával foglalkozni.
"Az "int c;"-re kb. annyi történik, hogy "
Lehet, hogy még annyi se, mert kioptimalizálja a fordítója a "c" változóját a kukába. :o)
Köszönöm a hasznos hozzászólásokat ! Igen nem csak a kommentelt sort kell kivenni hanem a kiírást is.
Ujrafogalmazom :
az üres értékű változóba helyesen beleíródik a beolvasott szám. Ki lehet írni %d-vel %x -el, ott van. Viszon ha én ezt egy másik változóba akarom írni (i=c;) akkor mit az i mint a c értéke megváltozik. Miért csak ott bukik ki a probléma ?
123
32765123
32765123
Nincs olyan, hogy üres értékű változó.
C++-ban az inicializálatlan változó értéke memóriaszemét lesz.
A hozzászólásod második fele meg teljesen értelmetlen/értelmezhetetlen.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!