C++. cin.fail, cin.clear, cin.ignore ์•Œ์•„๋ณด๊ธฐ

1 ๋ถ„ ์†Œ์š”

๐ŸŒŸ ์ž…๋ ฅ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜ 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;
}

์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค. ๋!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ