Code::Blocks -ban tanulom a C-t, viszont elakadtam. Valaki segítene?
Sziasztok, printf-nél nem jött elő ez a probléma, viszont a getchar-nál a for ciklus kettőt lép:
#include <stdio.h>
#include <stdlib.h>
#define amount 10
int main()
{
int c[amount];
for(int a=0;a<amount;a++)
{
c[a]=getchar();
}
}
Vagyis a c tömbnek 10 elemet szeretnék megadni, viszont csak 5-öt enged, a másik probléma, ha például 1-et szeretnék adni értéknek a watches menüben 49-et mutat. Köszönöm a segítséget előre is.
"ha például 1-et szeretnék adni értéknek a watches menüben 49-et mutat"
Tanulmányozásra javaslom: [link] ;-)
Az 1-et te mint karaktert írod be, és nem mint számot. A Getchar karaktert olvas be. Mivel a C egy viszonylag alacsony szintű nyelv, ezért gyakoriak benne az automata, gépi szintű típuskonverziók. Mind a karakter, mind a 8 bites egész 8 darab bitből áll. Hogy azt te számnak, vagy karakternek értelmezed, az igazából csak értelmezés kérdése. A c[a] értéke itt az '1' karakter lesz, ami bináris ábrázolásban megegyezik a 49-es számmal.
Javaslom a te célodra getchar helyett a scanf használatát.
A ciklus egyet lép amúgy, csak marad egy enter a konzolon.
Ezt nehéz kifejteni, de a lényeg az, hogy az enter amivel leokézod a bemenetet, szintén érvényes karakter (10-es karakterkód), és így a bemeneten marad.
Mindkettő problémádra ezt olvasd el:
A másik hiba oka pedig az, hogy a getchart nem egészen erre találták ki. Az egy karaktert olvas a bemenetről. De az "enter" is egy karakter... Szóval ha te beírod, hogy 1, majd nyomsz egy entert, az két karaktert fog a pufferben elhelyezni. Az 1-et, és az entert. Az enter lenyomásakor a programfutás folytatódik, és beolvassa a pufferben levő első karaktert. (1) Ezután a következő cikluslefutásban, mivel még van karakter a pufferben (enter), azt olvassa be. Ami látszólag számodra úgy tűnik, mintha kevesebbszer futna le a ciklus. De valójában lefut az, csak te - akaratodon kívül - egy menetben mindig két karaktert adsz be neki. A getchar nem számok beolvasására lett kitalálva, hanem egy adatfolyamból bájtok (karakterek) beolvasására. Akkor sem fog a kívánalmaid szerint működni, ha többjegyű számokat írsz be. Ha beírod, hogy 123, majd nyomsz egy entert, az rögtön 4 cikluslefutást eredményez, ugyanis az 123-at kerekterenként olvassa be. (Meg utána az entert ugyebár.)
Neked a scanf kellene ebben a példában.
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!