合計 昨日 今日

c++の基礎の件につての補足

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: shika
[URL]
Date: 2017年9月06日(水) 13:37
No: 1
(OFFLINE)

 c++の基礎の件につての補足

先ほどの質問は正しく動作する方でせた。
質問の趣旨はいかです。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
 
int main()
{//プログラムが上手く機能しない?
    int a = 8;
   
    cout << "         a = " << a << endl;
    cout.setf(ios::oct);
    cout << " 8進数 a = " << a << endl;  
    cout.unsetf(ios::oct);
}

です。なぜ機能しないのかが分かりません。
どなたか知っている人がいたら、ご教授願います。

Name: みけCAT
[URL]
伝説なるハッカー(680,600 ポイント)
Date: 2017年9月06日(水) 13:50
No: 2
(OFFLINE)

 Re: c++の基礎の件につての補足

shika さんが書きました:先ほどの質問は正しく動作する方でせた。

「先ほどの質問」というのはわかりにくいです。プログラムが上手く機能しない?のことでしょうか?
リンクを貼るか、この場合は返信でもいいでしょう。

shika さんが書きました:なぜ機能しないのかが分かりません。

ios::decのフラグが既に立っているので、ios::octのフラグが無視されると予想できます。
ios_base::setf - C++ Reference
によると、1引数のsetfは単独のフラグのセットに用い、2引数のsetfはios::decやios::octなどのような選択フラグのセットに用いるのがいいようです。
ios::decのunsetfを追加した
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int main()
{//プログラムが上手く機能しない?
    int a = 8;
   
    cout << "         a = " << a << endl;
    cout.setf(ios::oct);
    cout.unsetf(ios::dec);
    cout << " 8進数 a = " << a << endl;  
    cout.unsetf(ios::oct);
}

では、2行目が8進数で出力されました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Name: shika
[URL]
Date: 2017年9月06日(水) 14:08
No: 3
(OFFLINE)

 Re: c++の基礎の件につての補足

ご返答ありがとうございました。

Name: かずま
[URL]
Date: 2017年9月12日(火) 17:47
No: 4
(OFFLINE)

 Re: c++の基礎の件につての補足

解決したのなら、解決にチェックして送信をお願いします。

ios::oct を setf したいのなら、
ios::dec を unsetf するよりも、
ios::basefield を unsetf して、
ios::dec, ios::hex, ios::oct の全部をリセットしてから
ios::oct を setf しましょう。

この unsetf(ios::basefield) と setf(ios::oct) を
一度に行うのが、setf(ios::oct, ios::basefield) です。

基数の変更は、普通は、cout << oct のように
マニピュレータを使用します。

参考
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{
    cout << hex << setfill('0');
    cout << setw(4) << ios::skipws     << ": skipws\n";
    cout << setw(4) << ios::unitbuf    << ": unitbuf\n";
    cout << setw(4) << ios::uppercase  << ": uppercase\n";
    cout << setw(4) << ios::showbase   << ": showbase\n";
    cout << setw(4) << ios::showpoint  << ": showpoint\n";
    cout << setw(4) << ios::showpos    << ": showpos\n";
    cout << "--\n";
    cout << setw(4) << ios::left       << ": left\n";
    cout << setw(4) << ios::right      << ": right\n";
    cout << setw(4) << ios::internal   << ": internal\n";
    cout << "--\n";
    cout << setw(4) << ios::dec        << ": dec\n";
    cout << setw(4) << ios::oct        << ": oct\n";
    cout << setw(4) << ios::hex        << ": hex\n";
    cout << "--\n";
    cout << setw(4) << ios::scientific << ": scientific\n";
    cout << setw(4) << ios::fixed      << ": fixed\n";
    cout << "--\n";
    cout << setw(4) << ios::boolalpha  << ": boolalpha\n";
    cout << "==\n";
    cout << setw(4) << ios::adjustfield<< ": adjustfield = left | right | internal\n";
    cout << setw(4) << ios::basefield  << ": basefield = dec | oct | hex\n";
    cout << setw(4) << ios::floatfield << ": floatfield = scientific | fixed\n";
    cout << "==\n";
    cout << setw(4) << cout.flags() << ": flags()\n";
}

VC++の実行結果
コード[Text]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
0001: skipws
0002: unitbuf
0004: uppercase
0008: showbase
0010: showpoint
0020: showpos
--
0040: left
0080: right
0100: internal
--
0200: dec
0400: oct
0800: hex
--
1000: scientific
2000: fixed
--
4000: boolalpha
==
01c0: adjustfield = left | right | internal
0e00: basefield = dec | oct | hex
3000: floatfield = scientific | fixed
==
0801: flags()
0000: width()
0006: precition()

g++ の実行結果
コード[Text]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1000: skipws
2000: unitbuf
4000: uppercase
0200: showbase
0400: showpoint
0800: showpos
--
0020: left
0080: right
0010: internal
--
0002: dec
0040: oct
0008: hex
--
0100: scientific
0004: fixed
--
0001: boolalpha
==
00b0: adjustfield = left | right | internal
004a: basefield = dec | oct | hex
0104: floatfield = scientific | fixed
==
1008: flags()


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: maru & ゲスト[24人]