Kezdőoldal » Számítástechnika » Programozás » Code::Blocks -ban tanulom a...

Code::Blocks -ban tanulom a C-t, viszont elakadtam. Valaki segítene?

Figyelt kérdés

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.



2022. júl. 12. 23:29
 1/5 anonim ***** válasza:
82%

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

2022. júl. 12. 23:39
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:
85%

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:

[link]

2022. júl. 12. 23:53
Hasznos számodra ez a válasz?
 3/5 anonim ***** válasza:
88%

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.

2022. júl. 13. 00:00
Hasznos számodra ez a válasz?
 4/5 A kérdező kommentje:
Köszönöm a válaszokat, sokat segítettek, mindenkinek megy a zöld kéz. :)
2022. júl. 13. 00:09
 5/5 A kérdező kommentje:
A linkeket megnézem.
2022. júl. 13. 00:13

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

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!