[英]Unexpected characters in console output
我正在為Crysis Wars游戲編寫一個新的服務器 - 客戶端網絡。 我有一個函數將字符串居中到控制台窗口中每行支持的字符數。 該窗口適合113個字符,但我已將函數中的最大字符寬度設置為111
,以便很好地適應文本。
這是我的功能:
string Main::CenterText(string s)
{
return string((111 - s.length()) / 2, ' ') + s;
}
這個功能來自我去年提出的一個問題 ,但我不確定我是否最終在過去的項目中使用它。
我試圖在此上下文中使用此函數( CryLogAlways
函數只是將字符串記錄到游戲/服務器日志文件並打印它):
CryLogAlways(CenterText(" ____ ____ _ __ _ _ __").c_str());
CryLogAlways(CenterText(" / _/__ / _(_)__ (_) /___ _( )| |/_/").c_str());
CryLogAlways(CenterText(" _/ // _ \\/ _/ / _ \\/ / __/ // //_> < ").c_str());
CryLogAlways(CenterText("/___/_//_/_//_/_//_/_/\\__/\\_, / /_/|_| ").c_str());
CryLogAlways(CenterText(" /___/ ").c_str());
但輸出是:
同樣,@ deW1請求,我有一個類似的輸出與CryLogAlways(CenterText("X").c_str());
:
為什么我得到這個輸出,我該如何解決這個問題?
您正在使用不合格的類型string
。 我假設你在某處using namespace std
( 反對最佳實踐 ),這會使string
引用std::string
。 但顯然情況並非如此,並且您將非限定名稱string
定義為某些內容 (問題未顯示內容),其行為類似於std::string
(即它具有.length()
和.c_str()
)。 但是,這個東西的構造函數參數似乎與std::string
參數相反。
如果您希望您的函數使用標准庫字符串,請明確說明:
std::string Main::CenterText(std::string s)
{
return std::string((111 - s.length()) / 2, ' ') + s;
}
這是為什么對std
類型使用顯式限定是一個非常好的主意的一個主要例子。
根據C ++ Reference ,你是對的。
正如評論中所指出的,對於您使用的字符串實現,參數將被切換。
對於第二個示例,您打印符號(111-1)/ 2 = 55 ='7'表示''= 32次。 將參數交換為
string(' ',(111 - s.length()) / 2)
它應該更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.