ページ 11

C++でのcinのsetwについて

Posted: 2010年10月20日(水) 20:23
by ぺき
はじめまして、初めての投稿ですが、よろしくお願いします。
C言語は2年程度の経験、C++を学習し始めたところです。

以下のようなプログラムで、123456という数字を入力したときに、
setw(3)を使って最初の3文字分(つまり、123)だけaに代入したいのですが、
うまくいかずに123456が入ってしまいます。
C言語だと、scanf("%3d",&a);でうまくいくのですが、
C++ではできないのでしょうか?
ちなみにaをstring型で定義しているときは出来ました。
そもそもsetw自体が(本によると)出力に使うマニピュレータだから、
入力で使用してはダメなのでしょうか?


#include <iostream>
#include <iomanip>

int main(void){
using namespace std;
int a;

cin >> setw(3) >> a;
cout << a;

return(0);
}

ビルド環境はwinXPで、microsoft visual C++ 2010 Expressです。
簡単な質問だと思いますが、よろしくお願いします。
画像

Re:C++でのcinのsetwについて

Posted: 2010年10月21日(木) 01:32
by めるぽん
最初の3文字だけの数字を直接入力してもらう方法は分かりませんが、
string s;
    cin >> s;
    istringstream ss(s.substr(0, 3));

    int a;
    ss >> a;
    cout << a;
と書くのはどうでしょうか。

Re:C++でのcinのsetwについて

Posted: 2010年10月31日(日) 18:02
by ぺき
返事とても遅くなりました。
なるほどそういう手があるんですね。
勉強になりました。
ありがとうございます。