Странно поведение C++ Fundamentals.
Здравейте, решавам домашното от C++ Fundamentals и открих нещо, което не мога да си обясня. Когато hit-нах 40/100 на задача Min and Max: https://softuni.bg/trainings/resources/officedocument/42359/homework-c-plus-plus-fundamentals-september-2019/2402
Започнах да проверявам какво може да не е в ред и реших да опитам да въведа число с десетична запетая в конзолата (compare) при което програмата започва да игнорира cin >> compare и продължава до върти цикълът докато не изкара някакви необичайни стойности на minN и maxN.
По моята логика дори ако въведа число с десетична, то би трябвало да загуби стойност и да бъде записано от целочислен тип след, което цикълът да продължи нормално.
Това е source кода: https://pastebin.com/cEpDwcLV
След това реших да кастна въвежданото число до челочислено и така програмата работи ОК, но все пак получавам 40/100.
Някой може ли да задълбочи по темата ?
Source code след кастване: https://pastebin.com/fpGNpaA0
Благодаря !
Здравей Живко, благодаря за отговорът, бях наясно че cin извлича и записва това, което може, но идея си нямах, че в потока остава това, което евентуално е останало.
Има ли начин да предотвратим това? Начин с който да изчистим "буферираното" или да го игнорираме ??
Имаше подобна задача в basics, но там цикълът беше докато не въведем команда stop.
Поздрави.
Когато работиш с потоци (в този случай и cin/стандартния вход/) обикновенно се предполага, че знаеш формата в който ще идват данните.
Аналогично както даде пример с команда стоп може да имаш варианта - извличай числа докато има такива (ако не им знаеш бройката).
Относно това бефирирането - да, има начин да се игнорира информация от потока.
Това става с функцията "ignore()" на std::cin
Например std::cin.ignore() - това ще игнорира 1 символ от входа.
функцията ignore() също я има и като вариан с параметър, който приема аргумент колко символа да се игнорират.
Например std::cin.ignore(3) - игнорира следващите 3 символа.
П.С.cin-а попринцип автоматично консумира whitespace-овете между различните данни. За него това е "разделителят".