使用setw在for循环中失败

时间:2013-12-05 00:30:24

标签: c++

假设有一个名为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(将不会创建列而是不均匀的间距)非常相似。

这里有任何帮助吗?

1 个答案:

答案 0 :(得分:0)

您正在设置错误输出的宽度。

如上所述,setw(20)machine[i].drink;输出后开始。因此,如果您要为Coke打印$1.00,您会看到Coke后跟空格的15个填充字符,然后$1.00作为{{的最后5个字符1}}。但是,如果您想为setw(20)打印Mountain Dew,则会再次看到$1.00后跟相同的15个填充字符,然后是Mountain Dew

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

你应该在第一个输出上使用machine[i].price并左对齐它。然后在没有setw()或理由的情况下输出价格。

例如:

setw()