gpt4 book ai didi

c++ - 在 Windows 或 Linux 上运行时函数的行为不同

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:19 25 4
gpt4 key购买 nike

我有一个简单的函数,可以将文本行打印到控制台,居中,空白区域用“=”符号填充。当我在 Linux 上用我的程序运行这个函数时,我看到控制台窗口顶部正确显示了文本,然后是我的程序的菜单提示,但在 Windows 上它什么都不打印并直接跳到菜单提示。这两个程序都使用带有 -std=c++11 的 GNU gcc 在代码块中编译和运行。

void _print_center(vector<string>& tocenter)
{
int center;
for ( int x; x<static_cast<int>(tocenter.size());x++ )
{
char sfill = '=';
string line = tocenter[x];
center = (68/2)-(tocenter[x].length()/2);
line.replace(0, 0, center, sfill);
cout << std::left << std::setfill(sfill);
cout << std::setw(68) << line << endl;
}
}

最佳答案

您的问题得到了答案(未初始化的变量)。我建议您理清并简化您的代码,这样这类问题就不会经常出现。例如:

创建一个以单个字符串为中心的函数。

void center( std::ostream& os, const std::string& text, int width ) {
if ( text.size() >= width ) {
// Nothing to center, just print the text.
os << text << std::endl;
} else {
// Total whitespace to pad.
auto to_pad = width - text.size();
// Pad half on the left
auto left_padding = to_pad / 2;
// And half on the right (account for uneven numbers)
auto right_padding = to_pad - left_padding;

// Print the concatenated strings. The string constructor will
// correctly handle a padding of zero (it will print zero `=`).
os << std::string( left_padding, '=' )
<< text
<< std::string( right_padding, '=' )
<< std::endl;
}
}

一旦您测试该函数适用于单个字符串,就可以轻松地依赖 C++ 将其应用于字符串 vector :

void center( std::ostream& os,
const std::vector< std::string >& strings,
int width ) {
for ( auto&& string : strings ) {
center( os, string, width );
}
}

无论你想使用 std::string,还是 iomanip 操纵器,还是 std::setfill,要点都是一样的:做不要在同一个函数中实现“迭代和格式化”。

关于c++ - 在 Windows 或 Linux 上运行时函数的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53027013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com