C++. cin.fail, cin.clear, cin.ignore ์์๋ณด๊ธฐ
๐ ์ ๋ ฅ ์ฒ๋ฆฌ ํจ์ cin
cin์ ๋ํ์ ์ธ ํ์ค ์ ๋ ฅ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ด๋ค. cin์ ํตํด ์ฌ์ฉํ ์ ์๋ ๋ค์ํ ํจ์๋ฅผ ์์ ๋ณด๊ฒ ์!
๐ cin.fail
cin.fail
์ ์
๋ ฅ์ ๋ฐ์๋๋ฐ ์๋ฌ๊ฐ ๋๋ฉด true๋ฅผ ๋ฐํํ๋ ํจ์๋ค. ์ฌ์ฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์.
#include <iostream>
using namespace std;
int main()
{
int iNum;
cin >> iNum;
if(cin.fail())
cout << "์ ์๋ฅผ ์
๋ ฅํด์ฃผ์ธ์.";
return 0;
}
์ ์๊ฐ ์๋ ๋ค๋ฅธ ๊ฑธ ์
๋ ฅํ๋ค๋ฉด if๋ฌธ์ด ์๋ํด์ ์ ์๋ฅผ ์
๋ ฅํด์ฃผ์ธ์.
๊ฐ ์ถ๋ ฅ๋ ๊ฒ์ด๋ค.
๐ cin.clear
cin.clear
์ cin์ ๋ด๋ถ ์ํ ํ๋๊ทธ๋ฅผ ์ด๊ธฐํ ์์ผ cin์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๊ฒ ํ๋ค. cin์ ์๋ฌ๋นํธ๋ฅผ ์ด๊ธฐํ ํ๋ค๋ ๋ง! ์ด๋ฅผ ์ฌ์ฉํ๋ฉด cin.fail
์ true๋ฅผ ๋ฐํํ์ง๋ง ์ด๊ธฐํ ๋์ด ๋ ์ด์ true๋ฅผ ๋ฐํํ์ง ์๋๋ค.
#include <iostream>
using namespace std;
int main()
{
int iNum;
cin >> iNum;
while (cin.fail())
{
cout << "์ ์๋ฅผ ์
๋ ฅํด์ฃผ์ธ์.";
cin.clear();
cin >> iNum;
}
cout << "์
๋ ฅํ ์ซ์: " << iNum;
return 0;
}
๊ทธ๋์ ์ด๋ ๊ฒ ์ฌ์ฉํด๋ดค์ง๋ง ์ํ๊น๊ฒ๋ while๋ฌธ์ด ๊ณ์ ๋ฐ๋ณต๋์ด ๋ฃจํ์ ๋น ์ ธ๋ฒ๋ ธ๋ค. ์๋ฌ๋นํธ๋ง ์ด๊ธฐํ ํ์ง, cin์ ์
๋ ฅ ๋ฒํผ๋ ์ด๊ธฐํ ํ์ง ์์์ ์ฐ๋ ๊ธฐ ๊ฐ์ด ๊ณ์ ๋จ์ ์๋ ํ์ ๋ค์ cin.fail
์ ๋๋ฆฌ๋ฉด ์ฐธ์ด ๋ฐํ๋๋ ๊ฒ!
์ด๋ cin.ignore
์ ์ฌ์ฉํ๋ค.
๐ cin.ignore
cin.ignore
์ ์
๋ ฅ ๋ฒํผ๋ฅผ ์ด๊ธฐํํ๋ ํจ์๋ค. ๋ ๊ฐ์ ์ธ์๋ฅผ ์ฌ์ฉํ ์ ์๋๋ฐ, ์ฒซ ๋ฒ์งธ๋ ๋ฒ๋ฆด ๋ฌธ์์ ๊ฐ์์ ๋ ๋ฒ์งธ๋ ๊ธฐ์ค๊ฐ์ด๋ค.
cin.ignore(5, '\n');
์ด๋ ๊ฒ ์ฌ์ฉํ๋ฉด 5๊ฐ์ ์ ๋ ฅ ๊ฐ์ ๋ฒ๋ฆฌ๊ณ โ\nโ์ ๋ง๋๋ฉด ํจ์๊ฐ ์ข ๋ฃ๋๋ ํ์์ด๋ค. ์ธ์ ์์ด ๊ทธ๋ฅ ์ฌ์ฉํ๋ฉด ์ ๋ ฅ ๋ฒํผ๋ฅผ ์ด๊ธฐํํ๊ณ ๋๋ธ๋ค.
#include <iostream>
using namespace std;
int main()
{
int iNum;
cin >> iNum;
while (cin.fail())
{
cout << "์ ์๋ฅผ ์
๋ ฅํด์ฃผ์ธ์.";
cin.clear();
cin.ignore();
}
cin >> iNum;
cout << "์
๋ ฅํ ์ซ์: " << iNum;
return 0;
}
์ด๋ ๊ฒ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ค. ๋!
๋๊ธ๋จ๊ธฐ๊ธฐ