在for循环内部使用setw是失败的

Using setw is failing inside of a for loop

本文关键字:setw 失败 for 循环 内部      更新时间:2023-10-16

假设有一个名为machine的结构数组,其元素为drink、price。

for(int i = 0; i < 10; i++)
{
    cout << i+1 << ". " << machine[i].drink;
    cout << setw(20) << machine[i].price << "n";
}

这不是我通常期望的setw的工作方式,它以与\t大致相同的方式格式化我的空格(不是创建列,而是不均匀的间距)。

这里有人帮忙吗?

您正在为不正确的输出设置宽度。

如前所述,setw(20)machine[i].drink;输出之后启动。因此,如果您想为$1.00打印Coke,您会看到Coke后面跟着15个空格填充字符,然后$1.00setw(20)的最后5个字符。但是,如果您想为$1.00打印Mountain Dew,您会再次看到Mountain Dew后面跟着相同的15个填充字符,然后是$1.00

您需要的是将填充字符附加到machine[i].drink输出的末尾,但目前您将它们放在machine[i].price输出的开头。

您应该在第一次输出时使用setw()并左对齐。然后输出价格,不使用setw()或右对齐。

例如:

cout << setw(20) << left << i+1 << ". " << machine[i].drink;
cout << machine[i].price << "n";