1

長いプロジェクトを終えて、最後のステップは、データが適切な列に並んでいることを確認することです。簡単。私だけがこれに問題を抱えており、多くのビデオを見て、一体何をすべきかを本当に理解できないことを認めるよりも長く取り組んでいるので、ここに私が問題を抱えているコードの小さなスニペットがあります:

 #include <iostream>
 #include <iomanip>   


 using namespace std;

 int main(){        

    cout << "Student Grade Summary\n";
    cout << "---------------------\n\n";
    cout << "BIOLOGY CLASS\n\n";
    cout << "Student                                   Final   Final Letter\n";
    cout << "Name                                      Exam    Avg   Grade\n";
    cout << "----------------------------------------------------------------\n";
    cout << "bill"<< " " << "joeyyyyyyy" << right << setw(23) 
         << "89" << "      " << "21.00" << "   "
         << "43" << "\n";
    cout << "Bob James" << right << setw(23)  
         << "89" << "      " << "21.00" << "   "
         << "43" << "\n";
    }

これは最初のエントリでは機能しますが、ボブ ジェームス エントリの数字はすべて斜めになっています。setw はそれを無視できるようになっていると思いましたか? 私は何が欠けていますか?ありがとう

4

3 に答える 3

2

思うようにはいきません。std::setw次の挿入のためにのみフィールドの幅を設定します (つまり、「スティッキー」ではありません)。

代わりに次のようにしてみてください。

#include <iostream>
#include <iomanip>

using namespace std;

int main() {

    cout << "Student Grade Summary\n";
    cout << "---------------------\n\n";
    cout << "BIOLOGY CLASS\n\n";

    cout << left << setw(42) << "Student" // left is a sticky manipulator 
         << setw(8) << "Final" << setw(6) << "Final"
         << "Letter" << "\n";
    cout << setw(42) << "Name"
         << setw(8) << "Exam" << setw(6) << "Avg"
         << "Grade" << "\n";
    cout << setw(62) << setfill('-') << "";
    cout << setfill(' ') << "\n";
    cout << setw(42) << "bill joeyyyyyyy"
         << setw(8) << "89" << setw(6) << "21.00"
         << "43" << "\n";
    cout << setw(42) << "Bob James"
         << setw(8) << "89" << setw(6) << "21.00"
         << "43" << "\n";
}

また関連: setw() との取引は何ですか?

于 2015-04-07T22:49:54.117 に答える
1

マニピュレータは、文字列 "89" を 23 文字幅のフィールドの右端に設定することを<< right << setw(23)に伝えています。ただし、最後の改行以降に出力される文字列の幅を除いて、そのフィールドを開始するostream場所を ostream に伝えるものは何もありません。また、出力に書き込む文字数が実際よりも多いため、2 行目の 23 文字幅のフィールドは、1 行目の同じフィールドのかなり左側から開始されます。<< "bill"<< " " << "joeyyyyyyy"<< "Bob James"

于 2015-04-07T22:50:02.133 に答える