Na vývojářské konferenci Applu WWDC23 byla představena řada novinek (cz): brýle Apple Vision Pro, MacBook Air 15” s čipem M2, Mac Studio s čipem M2 Max nebo M2 Ultra, Mac Pro s čipem M2 Ultra, iOS 17, iPadOS 17, macOS Sonoma, watchOS 10, …
Chystá se poslední jarní Virtuální Bastlírna. Nachystejte si ledové kávy, mojita a vodní chladiče a pojďte se se strahovskými bastlíři pobavit o technice a bastlení! Ptáte se, co mají bastlíři za novinky? Například se ukázalo, že OLED s SSD1306 ve skutečnosti nejsou nutně jen černobílé. Vyšla také nová verze KiCADu včetně betaverze pluginu pro tvorbu databázových knihoven pro KiCAD v InvenTree a na internetu se objevil USB
… více »6. červen je dnem za skutečný internet (neboli Světový den IPv6). Již tradiční příležitost urgovat svého ISP, kdy zavede do sítě IPv6, ale také příležitost šířit osvětu i mezi netechnické uživatele. V současnosti má IPv6 v ČR jen cca 20 % uživatelů (podle statistik společností Akamai a Google).
Festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí Maker Faire Prague 2023 proběhne o víkendu 10. a 11. června na Výstavišti Praha.
Byla vydána verze 8.18 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání.
Projekty Blink a Blinkenlights dospěly do verze 1.0. Jedná se o x86-64-linux emulátor a jeho TUI nadstavbu sloužící jako debugger. Blink je v porovnání s qemu-x86_64 menší a rychlejší.
Bylo potvrzeno, že Debian 12 s kódovým jménem Bookworm vyjde v tuto sobotu 10. června.
Byla vydána nová verze 2023.2 linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux (Wikipedie). Přehled novinek se seznamem nových nástrojů v oficiálním oznámení. Zdůraznit lze předpřipravené obrazy pro Hyper-V nebo to, že ve výchozím prostředí Xfce bylo PulseAudio nahrazeno multimediálním serverem PipeWire.
Tento týden byla vydána nová verze 1.52 webového prohlížeče Brave (Wikipedie, GitHub). Postavena je na Chromiu 114. Z novinek lze vypíchnout možnost povolit vertikální karty (vertical tabs). Také bylo představeno Brave Search API k vyhledávači Brave Search.
Matthias Clasen z Red Hatu oznámil v diskusním listu vývojářů Fedora Linuxu, že tým Red Hat Display Systems se zaměří na Wayland a podporu HDR na Linuxu a přestane spravovat RPM balíčky pro LibreOffice. V další major verzi RHELu už LibreOffice nebude. Pokud se nenajde správce balíčků pro Fedora Linux, zůstane pouze LibreOffice ve Flatpaku.
1)Vstup je jasně daný: a oper b
, kde a
a b
jsou typu double
, oper
je +,-,* nebo /
Přičemž program ignoruje mezery mezi jednotlivými vstupy - příklad:
3 + 1
program interpretuje jako 3+1 nehledě na to že uživatel zadal mnoho mezer mezi jednotlivými vstupy
2) Pokud uživatel zadá nějaký nesmysl - například 4
nebo 3a
a zmáčkne ENTER
tak se objeví chybová hláška
Takto vypadá můj současný kód:
int main()
{
char oper;
double a, b;
printf("Napiste co chcete vypocitat\n");
scanf("%lf", &a);
getchar();
oper = getchar();
scanf("%lf", &b);
switch(oper)
{
case '+':
printf("%f+%f=%.2f",a,b,a+b);
break;
case '-':
printf("%f-%f=%.2f",a,b,a-b);
break;
case '*':
printf("%f*%f=%.2f",a,b,a*b);
break;
case '/':
if(b != 0)
{
printf("%f/%f=%.2f",a,b,a/b);
break;
}
else
{
printf("Error! Delite nulou.");
break;
}
default:
printf("Error! Spatne zadany operator.");
break;
}
return 0;
}
Řešení dotazu:
char oper[2] = {0, 0}; double a, b; if (3 == scanf("%lf %1[+/*-] %lf", &a, &oper, &b)) { printf("%f %c %f = %.2f\n", a, oper[0], b, a + b); } else { fprintf(stderr, "Nejaka blbost.\n"); }
double a, b; char op; if (scanf("%lf %1[-+/*] %lf", &a, &op, &b) != 3) printf("Error.\n"); else { /* ... */ }
scanf() je mnohem inteligentnější, než se obecně ví...Ještě ho naučit, že tečka i čárka u plavacích čísel totéž je (ehm tedy desetinný oddělovač, bez ohledu na locale) a bylo by vystarané...
394
a zmáčknu ENTER
tak se mi ta hláška ERROR nechce zobrazit, zatímco pokud zadám 3 56
nebo CauLidi
tak se hláška ERROR zobrazí. Nevíte v čem je problém?
int main()
{
char oper;
double a, b;
char buffer[256];
printf("Napiste co chcete vypocitat\n");
fgets(buffer, 256, stdin);
if (sscanf("%lf %1[-+/*] %lf", &a, &oper, &b) != 3)
printf("ERROR.\n");
else
{ .... zbytek kódu je stejný....
Problémem ale teď je že pokud zadám normální vstup
3 + 1
tak to zmrzne jako předtím.
Ovšem když zadám
3458
tak se doopravdy objeví ERROR
Mohli byste mi to prosím vysvětlit a opravit?
scanf("%lf%*[ \t]%1[+/*-]%*[ \t]%lf", &a, &oper, &b)Ale jinak se mi taktéž osvědčilo nejdříve načíst řádek a pak teprve ho parsovat. Pokud konec řádku nese význam, je to spolehlivější a lépe to reaguje na chyby ve vstupu.
Tiskni
Sdílej: