C++: Adatbekérés konzolon

Programozással kapcsolatos cikkek / C, C++ (1425 katt)

A C++ programozás tanulása során gyakran felmerül az a feladat, hogy egy Win32 Console Application-ben kérjünk be adatokat egy adott végjelig. Egy lehetséges példa: olvassunk be számokat addig, amíg a felhasználó 0-t nem ír be, majd írjuk ki a számok összegét.

Erre egy lehetséges megoldás az alábbi program:

#include <iostream>

using namespace std;

int main()
{
int sum = 0;
int szam;

do
{
cout << "A szam: ";
cin >> szam;

sum += szam;
} while (szam != 0);

cout << "A szamok osszege: " << sum << endl;

return 0;
}



Ezzel a megoldással az a gond, hogy ha véletlenül nem számot írunk be, akkor a program végtelen ciklusba kerül, és nem tudunk újabb számokat begépelni. A problémát az alábbi módosított programmal kerülhetjük ki:

#include <iostream>

using namespace std;

int main()
{
int sum = 0;
int szam;

do
{
cout << "A szam: ";
cin >> szam;

if (cin.fail())
{
cout << "Hibas adat!" << endl;

fflush(stdin);
cin.clear();
}
else
{
sum += szam;
}
} while (szam != 0);

cout << "A szamok osszege: " << sum << endl;

return 0;
}




Update (2016.04.06.):

A Visual Studio 2015 használata esetén azt tapasztaltam, hogy a fent leírt fflush(stdin)-es megoldás nem működik. Ehelyett a következő módszert lehet használni:

if (cin.fail())
{
cin.clear();
cin.ignore(numeric_limits<int>::max(), '\n');
}



További infó:

https://msdn.microsoft.com/en-us/library/3w23zf49.aspx

Előző oldal Kapitány