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?
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?
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);
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.
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!