簡體   English   中英

控制台輸出中出現意外的字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM