Kezdőoldal » Számítástechnika » Programozás » Mi történik mikor két változót...

Mi történik mikor két változót egyenlővé teszek C-ben?

Figyelt kérdés

Í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;

}


2018. febr. 14. 09:09
1 2 3
 1/25 anonim ***** válasza:
100%
A c változónak nem adtál kezdőértéket, mielőtt elkezdted szorozgatni saját magával. Mivel helyi változó, az értéke nem 0, hanem ismeretlen.
2018. febr. 14. 09:21
Hasznos számodra ez a válasz?
 2/25 A kérdező kommentje:
Köszönöm szépen. Egy kicsit ködös miért működik így, hogy csak akkor bukik ki ha dolgozni akarok az értékkel.
2018. febr. 14. 09:27
 3/25 anonim ***** válasza:
85%

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.

2018. febr. 14. 09:39
Hasznos számodra ez a válasz?
 4/25 anonim ***** válasza:
61%

" 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?

2018. febr. 14. 11:11
Hasznos számodra ez a válasz?
 5/25 tabaki ***** válasza:

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

2018. febr. 14. 11:57
Hasznos számodra ez a válasz?
 6/25 anonim ***** válasza:
Az "int c;"-re kb. annyi történik, hogy a stack pointert feljebb tolja sizeof(int) bájttal (és persze a kódban az SP-hez képesti relatív címek kerülnek a c-re hivatkozásokhoz). Amikor értéket adsz neki, akkor fog íródni is oda valami, addig semmi.
2018. febr. 14. 17:44
Hasznos számodra ez a válasz?
 7/25 anonim ***** válasza:
(Egyébként az "int c=0;" sem ördöngösség, olyankor egy "push 0" fut le.)
2018. febr. 15. 13:53
Hasznos számodra ez a válasz?
 8/25 anonim ***** válasza:

"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)

2018. febr. 15. 15:14
Hasznos számodra ez a válasz?
 9/25 A kérdező kommentje:

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

2018. febr. 15. 21:08
 10/25 anonim ***** válasza:

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.

2018. febr. 15. 23:25
Hasznos számodra ez a válasz?
1 2 3

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!