Kezdőoldal » Számítástechnika » Programozás » C Eclipse printf probléma....

C Eclipse printf probléma. Nem írja ki a printf a tartálmát a program indításakor ha van benne scanf. Mi lehet a baj?

Figyelt kérdés

Sziasztok, nemrég telepítettem az Eclipset. Felraktam a JDK-t, MinGW-t és az Eclipse-t, minden tökéletesen megy kivéve 1 dolgot. Mikor elindítom a megírt programot nem fut le az elején a printf ha van utánna scanf. Csak akkor ír a konzolba a printf miután megadtam amit vár a scanf.

(Op rendszer: Win7 64bit, JDK7 64bit)

Egyszerű szemléltetés a problémára


int i=42;

printf("Mi a válasz az univerzumra meg úgy mindnre?\n");

printf("A válasz: %d", i);

ezt a részt lefuttatom, ír szépen a konzolba, de:


int i=42;

printf("Mi a válasz az univerzumra meg úgy mindnre?\n");

scanf("%d", &i);

printf("A válasz: %d", i);

Itt elindítom a konzol üres, csak miután beírtam egy számot, akkor fut le a printf. A konzol következő kép néz ki:

123 <- üres volt a konzol, beírtam valamit

Mi a válasz az univerzumra meg úgy mindnre? <- csak most futott le a printf....

A válasz: 123


Mi lehet a baj?


2011. szept. 30. 00:31
 1/3 anonim ***** válasza:

C-t sose próbáltam Eclipse-el. Azt hiszem tudom mi lehet a probléma oka.

Próbáld ki a lefordított exe-t cmd parancsosrból futtatni! Ekkor elvileg nem tapasztalod ezt a jelenséget.

A jelenség attól lehet hogy az Eclipse egy pufferelt csatornán kapja meg a programtól a program standard kimenetét, az az OS-re van bízva hogy mikor gyűlt össze megfelelő számú byte a pufferben és mikor kell elküldeni, ha a program nem rendelkezik sehogy. Ezt befolyásolhatja a program az fflush(stdout) függvényhívással, hogy most kell üríteni a puffert, a kompatibiltás miatt ezt mindig kéne használni, de el szoktak tőle tekinteni, az OS által biztosított allokált konzolablak nem használ puffert.


Vagyis így fest a kód:

int i=42;

printf("Mi a válasz az univerzumra meg úgy mindnre?\n");

fflush(stdout);

scanf("%d", &i);

printf("A válasz: %d", i);

fflush(stdout);

2011. szept. 30. 10:03
Hasznos számodra ez a válasz?
 2/3 A kérdező kommentje:
Igen a kérdés feltevése előtt rá googleztem a problémámra és volt egy hasonló ahol szintén ajánlották az illetőnek a "fflush(stdout);". Sima C-ben is működik, csak jobban örülnék egy olyan megoldásnak, ahol az Eclipse-ben vagy a MinGW-ben kell konfigurálni valamit, hogy ne kelljen használni a "fflush(stdout);"-t. De köszi a válaszod.
2011. okt. 2. 18:58
 3/3 anonim válasza:

Nekem is meg volt ez a probléma, elvileg konzolfüggő, és úgy értesültem, hogy nem nagyon lehet beállítani. Viszont itt egy egyszerűbb függvény az fflush-nál. setbuf(stdout, 0);

Főprogram legelején kell beírni, utána már nincs dolgod vele.

2011. nov. 25. 14:24
Hasznos számodra ez a válasz?

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!