Hogyan olvasok be C-ben stringbe majd ellenörzöm le hogy mi van benne?
Arra gondolok, hogy:
--
char gyumolcs;
scanf("%s",gyumolcs);
--
majd megnézem mit irtak bele, számokkal ez ugye simán valmi == valami
if(gyumolcs=="valami"){}
És ha egyezik az állítás akkor nyilván tovább fut az if hanem akkor az else
C esetében alapmű, nem nehéz megtalálni pl. PDF-ben.
Meg fogod érteni ha ezt olvasod
char gyumolcs;
scanf("%s",gyumolcs);
Ööö, ez neked lefutott? Próbáld így:
char gyumolcs[32]; // csak akkor 31 karakternél ne legyen hosszab a gyümi neve
scanf("%s",gyumolcs); // és ezen a ponton olvass utána a tömböknek és pointereknek
Nem kell a biblia, kezd valami egyszerűvel, szép sorban, pl:
A deklaráció nem jó, neked char tömb kell, nem egy sima char:
char gyumolcs[32];
vagy
char * gyumolcs = malloc(32*sizeof(char));
A scanf-t felejtsd el, nem lehet neki megmondani, hogy mekkora a buffered, használd az fgets függvényt.
Az összehasonlításra az == nem úgy müködik stringekre C-ben, mint ahogy gondolod. A strncmp függvény tud összehasonlítani két stringet.
#7: még akár le is futhat, de minimum warningal:
char gyumolcs; // ez egy 8 bites szám, ugye. Nincs inicializálva, tehát az értéke nem definiált. A gyakorlatban itt egy memóriaszemét van, legyen pl: 0x15
scanf("%s", gyumolcs); // itt ugye egy pointert kéne megadni, a kérdezö meg egy 8bites chart adott meg. A C persze simán leszarja, tol rá egy integer propagationt, kiböviti pointer méretüre: ha pl 0x15 volt a memóriaszemét a gyumolcsben, akkor 0x00000015 lesz belöle. Na erre a címre a scanf megprobálja beírni a stringet, amit az user beírt. Elég valószínü, hogy ez a terület valami másnak van fentartva, jó eséllyel read-only -> valószínüleg ezen a ponton crashelni fog a program.
Én pythonról váltottam C-re egyetem miatt(ha SZTE re mesz nyugodtan irj ram, segitek szivesen) és valóban nagy falat.
A lényeg a feladatodban, hogy C ben valójában nem létezik string, csak betűsorozat. Ezért kell char[32] nek dekralálni, ahogy a felettem lévő írta. Ami nem más mint 31 betűnek a helyfoglalása plusz egy \n karakternek, ami bár nem látszik, de a betűtömb végét jelzi. Ja és sajnos, ha spacet teszel bele(2szavas gyümölcsnév) scanf máris megbukik sajna:(. 1szót tudsz ezzel beolvasni egyszerre.
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!