NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Petr Čech
Tvůrce
Avatar
Petr Čech:5.12.2017 17:53

Ahoj, měl jsem napsaný cyklus na čtení vstupu takto:

int from, to, err;
while ((err = scanf("%d %d", &from, &to) == 2)) {
    doStuff();
}
if (err != EOF) {
    // throw exception
}

To ale nefunguje, výjimku to vyhodí i na EOF. Má otázka je, proč to nefunguje.
AFAIK by to mělo fungovat takto:
err=scanf() to má stejnou návratovou hodnotu jako výstup scanf().
to se porovná se 2 a pokud to není 2, ale třeba EOF, zůstane mi ta návratová hodnota scanf() v err, s čímž potom můžu dál pracovat. Místo toho je ale err při EOF 0.

PS: už mám funkční kód, ale chci vědět, proč tohle nejde.

Odpovědět
5.12.2017 17:53
the cake is a lie
Avatar
Odpovídá na Petr Čech
Neaktivní uživatel:5.12.2017 18:35

Scanf vraci pocet uspesnych kovnerzi. Pokud je EOF, neprovedla se zadna konverze => 0.
I kdyz z dokumentace vypliva, ze pokud dojde na error pri cteni pred prvnim argumentem, ma to byt EOF. Okey, moje odpoved neni k nicemu.

Editováno 5.12.2017 18:38
Nahoru Odpovědět
5.12.2017 18:35
Neaktivní uživatelský účet
Avatar
Odpovídá na Petr Čech
Neaktivní uživatel:5.12.2017 18:46

Zavorky.

(err = scanf("%d %d", &from, &to) == 2)

je
err = (scanf() == 2).
Myslim :)

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
5.12.2017 18:46
Neaktivní uživatelský účet
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Petr Čech:5.12.2017 19:14

Díky. Však to je jasné, a já v tom hledal něco složitého :D . Nemám právě moc rád tyhle přiřazení v podmínce, ale v céčku to je někdy "čistší" než nějaká obdoba.

Editováno 5.12.2017 19:14
Nahoru Odpovědět
5.12.2017 19:14
the cake is a lie
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.