【问题标题】:Issues with column alignment列对齐问题
【发布时间】:2017-05-15 15:47:45
【问题描述】:

我能够对齐列,但我的编码出现问题,我的“%”无法连接到百分比变量。

这是我的输出/对齐编码:

//HEADER
    outFile << left << setfill(' ') << setw(15) << "Member Name" 
                << setfill(' ') << setw(20) << "Portion Achieved" 
                << setfill(' ') << setw(12) << "Grade (%)" 
                << setfill(' ') << setw(15) << "Letter Grade" 
                << setfill(' ') << setw(15) << "Comment" << endl;

 while (count <= 6)
    {
    cout << "Enter Name: ";
    cin >> student.name;
    cout << "Points Achieved: ";
    cin >> student.points;
    cout << "\n";

        decimal = (student.points/60);
        percent = decimal*100;

        outFile << left << setfill(' ') << setw(15) << student.name 
                << setfill(' ') << setw(20) << decimal 
                << setfill(' ') << setw(12) << percent << " %"
                << setfill (' ') << setw(15);

这是输出的样子:

Member Name    Portion Achieved    Grade (%)   Letter Grade   Comment        
Min            0.166667            16           %F              Sorry, you did not pass :(
Carmela        0.333333            33           %F              Sorry, you did not pass :(
Jayson         0.5                 50           %F              Sorry, you did not pass :(
Kristin        0.666667            66           %D              Needs Improvement!
Mae            0.833333            83           %B              Well Done!     
JT             1                   100          %A              Excellent!  

VS 我希望它看起来如何:

    Member Name    Portion Achieved    Grade (%)   Letter Grade   Comment        
    Min            0.166667            16%         F              Sorry, you did not pass :(
    Carmela        0.333333            33%         F              Sorry, you did not pass :(
    Jayson         0.5                 50%         F              Sorry, you did not pass :(
    Kristin        0.666667            66%         D              Needs Improvement!
    Mae            0.833333            83%         B              Well Done!   
    JT             1                   100%        A              Excellent! 

【问题讨论】:

  • 试试&lt;&lt; percent &lt;&lt; setw(12) &lt;&lt; " %" 而不是&lt;&lt; setw(12) &lt;&lt; percent &lt;&lt; " %"
  • @tobi303:那行不通。
  • 它使 # 和 % 保持不变,但现在我的最后两列未对齐。
  • 无论百分比值有多长,Tobi 的建议都是在 " %" 周围添加十个空格。

标签: c++ alignment


【解决方案1】:

它正在做你告诉它做的事情。整数 percent 值的“宽度”为 12 个字符。之后发生的任何事情都会发生。这里没有将任何东西“连接”在一起的代码,C++ 流中也不存在任何此类功能。

您可能必须将percent + " %"(伪代码)预先构造为一个字符串,然后将该单个字符串用作列值。也许:

<< setfill(' ') << setw(12) << (std::to_string(percent) + " %")

否则,请删除 setw 并自己写 n 个空格。为此,您需要计算出您的字符串化 percent 文本有多“长”,加 2(表示“%”)然后从 12 中减去该手数。将 std::string(n, ' ') 写入流。呸!

【讨论】:

  • 类似于&lt;&lt; setfill(' ') &lt;&lt; setw(12) &lt;&lt; std::to_string(percent) +" %" 的东西应该可以工作。
  • 我明白了。谢谢!
  • 您能进一步解释一下吗?我尝试制作一个新的字符串等级,其中 [grade = percent + "%" ]。但是当我输出等级时,它不会执行 #% 它输出完全不同的东西。
  • 什么是“完全不同”的东西? grade 是什么?如果不确切知道你做了什么,我无法帮助你。你试过我给你的代码了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-26
  • 1970-01-01
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多