简体   繁体   English

C ++中的格式化输出

[英]Formatted output in C++

I am playing around with the setw and setfill functions but I'm absolutely stuck now. 我正在使用setwsetfill函数,但是现在我完全被卡住了。 Here is my code: 这是我的代码:

char separator = ' ';

cout << "-" << setw(INET_ADDRSTRLEN*4 + INET6_ADDRSTRLEN) << setfill('-') << "\n";
cout << "| Name" << setw(INET_ADDRSTRLEN) << setfill(separator);
cout << "| IPv4" << setw(INET_ADDRSTRLEN) << setfill(separator);
cout << "| IPv6" << setw(INET6_ADDRSTRLEN) << setfill(separator);
cout << "| Netmask" << setw(INET_ADDRSTRLEN) << setfill(separator);
cout << "| Broadcast" << setw(INET_ADDRSTRLEN) << setfill(separator);
cout << "|\n";
cout << "-" << setw(INET_ADDRSTRLEN*4 + INET6_ADDRSTRLEN) << setfill('-') << "\n";

while (iter != this->iface.end()) {
    cout << "| " << (*iter).iface_name << setw(INET_ADDRSTRLEN) << setfill(separator);
    cout << "| " << (*iter).ipv4 << setw(INET_ADDRSTRLEN) << setfill(separator);
    cout << "| " << (*iter).ipv6 << setw(INET6_ADDRSTRLEN) << setfill(separator);
    cout << "| " << (*iter).netmask << setw(INET_ADDRSTRLEN) << setfill(separator);
    cout << "| " << (*iter).broadcast << setw(INET_ADDRSTRLEN) << setfill(separator);
    cout << "|\n";
    iter++;
}

And here is my output. 这是我的输出。 How can I fix the alignment of the columns? 如何修复列的对齐方式?

--------------------------------------------------------------------------------------------------------------
| Name          | IPv4          | IPv6                                     | Netmask     | Broadcast              |
--------------------------------------------------------------------------------------------------------------
| lo              | 127.0.0.1              | ::1                                            | 255.0.0.0              | 127.0.0.1              |
| eth0              | 192.168.1.100              | fe80::2ad2:44ff:fe39:f798                                            | 255.255.255.0              | 192.168.1.255              |
| wlan0              | 192.168.1.103              | fe80::e8b:fdff:fe7c:bf5                                            | 255.255.255.0              | 192.168.1.255              |

You want to left-align your padded fields, it'll be simpler to reason about (see std::left ): 您想使填充字段左对齐,这将使推理起来更加简单(请参阅std::left ):

std::cout << std::setw(INET_ADDRSTRLEN) << std::left << iter->iface_name
          << "| " 
          << std::setw(INET_ADDRSTRLEN) << std::left << iter->ipv4
          << "| "
          << std::setw(INET6_ADDRSTRLEN) << std::left << iter->ipv6
          // etc.

As-is, your columns aren't based on your string lengths but rather on the spaces which follow them - which logically aren't constant-width. 照原样,您的列不是基于字符串的长度,而是基于其后的空格-从逻辑上讲,它们不是恒定宽度的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM