我已經編寫了一個程序,其中包含多個函數和多個函數,每個函數都在控制檯傳遞給控制檯時在控制檯上打印幾件東西。現在我正試圖在屏幕的中心打印所有內容,而不是屏幕的左上角。爲了這個目的,我唯一知道的就是Windows.h的gotoxy函數。現在這將是一件非常忙碌的工作,因爲我必須在每個「cout」之上放置gotoxy。有沒有辦法將光標設置到屏幕上的特定位置,並且每次打印都會從該特定位置開始打印。請在C++中建議比gotoxy更好的功能
回答
編寫一個接收要打印的字符串的小幫助函數(例如printCentered(std :: string))。該功能將光標移動到中心,然後打印參數。然後用這個函數的調用來替換你的cout。
假設你正在使用的cout寫入,該黑客應該做的工作:
#define AT_CENTER(stuff) goto(100, 100); cout << stuff;
其中100,100應該使用特定的值來代替。然後使用:
AT_CENTER("The meaning of life is " << x);
這是非常醜陋的。 – 2011-05-25 18:52:58
@Etienne:我自己是一個無神論者,我仍然想引用一個特定的聖書:「讓沒有罪的人投第一塊石頭」;) – 0xC0000022L 2011-05-25 18:56:38
那麼,對於「可怕」的小值。你必須是一個敏感的靈魂 - 那裏更糟。我確實說這是一個黑客。實際上,我在所有的錯誤報告代碼中使用了非常相似的東西。 – 2011-05-25 18:57:37
- 不要使用
cout
或任何其他基於流的I/O繪製整個屏幕。如果流被重定向到不同的設備,「定位」流是沒有意義的。 - 直接調用Win32 console functions,如在控制檯程序中繪製狀態行的this example。
下可以輕鬆的查找和替換,並採取光標設置爲中心的護理:
#include <iostream>
std::ostream& PrintCentered(){
// comment in the following if you're experiencing
// weird output due to io-buffering like @Ben says in a comment
//std::cout.flush();
gotoxy(your_x, your_y);
return std::cout;
}
現在只要找到&上述功能取代你std::cout
電話,你想讓它集中。替換後的用法應該如下所示:
PrintCentered() << "your message";
- 1. 請在Mercurial中建議一個更好的工作流程
- 2. turbo中的gotoxy函數c
- 3. 爲什麼這個功能比功能更好?
- 4. C++比PHP有更少的功能嗎?
- 5. 在Swift中更好的「無功能」?
- 6. Char比較功能在C
- 7. C++中的數據持久性 - 建議更好的方法
- 8. C#IPC建議和比較
- 9. AX 2009中的付款建議功能
- 10. 功能建議Var列表
- 11. 比MATLAB中的datenum更快的功能
- 12. C#腳本 - 請求建議請
- 13. 更好地跳轉功能或將功能值傳遞給功能? C
- 14. 什麼商業WPF套件更好?請建議
- 15. RedirectToAction幫助:或更好的建議
- 16. 提交onclick更好的建議
- 17. 以下功能的性能更好?
- 18. 在dojo的ComboBox中顯示建議的更好方法
- 19. 訪問Logitech BRIO功能的建議
- 20. 帶以下功能的CMS建議
- 21. 任何改善此功能的建議?
- 22. 添加插件功能的建議?
- 23. 爲什麼「Set()」功能比修改公共變量更好?
- 24. 建議有一個在php中結合了兩個或更多內置消毒功能的santizing功能?
- 25. 在C++中創建存根功能
- 26. 在WCF中實現緩存功能所需的建議
- 27. 與Java相比,Android C有更好的性能嗎?
- 28. NHibernate性能優化|建議邀請!
- 29. 高性能查詢 - 請提出建議
- 30. 您是否發現IE 8 Developer中有比螢火蟲更好的功能?
'std :: string'可以說是更好的選擇(或者至少是const char *')。 – 2011-05-25 18:48:01
@Etienne謝謝。 – Hyperboreus 2011-05-25 18:52:09
爲了實現這個東西,我必須推薦我正在試圖避免的整個程序。有什麼替代方案可以建議嗎? – Rafay 2011-05-25 18:59:46