C++ の cin>> と std::getline の違いは単語単位か行単位2020年01月28日 22時04分45秒

前日に間違った cint>> の使い方を見たときに、cin と getline のどちらを使うべきかちょっと考える機会があったので、ちょっと追記。

C++ には std::getline と言う関数がある。C の getline とはまた別物。

#include <string>
#include <iostream>

int main()
{
    int input;
    while( std::cin >> input )
    {
        std::cout << "cin" << input << std::endl;
    }
}
cin>> で回すループをこう書き換える。
#include <string>
#include <iostream>

int main()
{
    std::string input;
    while( std::getline( std::cin, input ) )
    {
        std::cout << "getline:" << input << std::endl;
    }
}

この二つの大きな違いは単語毎に区切るか、行毎に区切るか。

% c++ cin.cpp -o cin
% ./cin
1 2 3
cin:1
cin:2
cin:3
^C
% c++ getline.cpp -o getline
% ./getline
1 2 3
getline:1 2 3

他には cin だと、型に適した変換が出来る利点があり、getline には区切り文字の指定が出来る利点もある。

前回次回