使控制台标题栏显示变量的值

时间:2016-10-12 20:32:43

标签: c++ variables console title

我正在开发一个小程序,它可以计算出用户给出的数字。他们输入的数字存储在变量limit中。我希望该变量中的数字显示在标题类型中:“计数最多3000”或“限制设置为3000”或类似的东西。我尝试使用SetConsoleTitle(limit);和其他东西,但它们只是不起作用。使用我发布的代码,我收到以下错误:

  

类型“int”的参数与“LPCWSTR”类型的参数不兼容

我目前正在使用Visual Studio 2015,如果这在任何方面都很重要。

#include <iostream>
#include <windows.h>    
#include <stdlib.h>        
using namespace std;

int main()
{
    begin:                            
    int limit;
    cout << "Enter a number you would like to count up to and press any key to start" << endl;
    cin >> limit;

    SetConsoleTitle(limit); // This is my problem
    int x = 0;
    while (x >= 0)
    {
        cout << x << endl;
        x++;

        if (x == limit) 
        {
            cout << "Reached limit of " << limit << endl;
            system("pause");
            system("cls");
            goto begin;
        }
    }
    system("pause");
    return 0;
}

1 个答案:

答案 0 :(得分:0)

SetConsoleTitle()函数需要一个字符串作为参数,但是你给它一个整数。一种可能的解决方案是使用std::to_wstring()将整数转换为宽字符串。因此得到的C ++字符串与 SetConsoleTitle()期望的以null结尾的宽字符字符串的格式不同,因此我们需要使用c_str()方法进行必要的转换。所以,而不是

SetConsoleTitle(limit);
你应该

SetConsoleTitle(to_wstring(limit).c_str());

别忘了#include <string> to_wstring()工作。

如果您想要的标题不仅包含数字,那么您需要使用字符串流(在这种情况下为wide character string stream):

wstringstream titleStream;
titleStream << "Counting to " << limit << " goes here";
SetConsoleTitle(titleStream.str().c_str());

要使字符串流有效,#include <sstream>。这是完整的代码:

#include <iostream>
#include <string>
#include <sstream>
#include <windows.h>    
#include <stdlib.h>     
using namespace std;

int main()
{
begin:
    int limit;
    cout << "Enter a number you would like to count up to and press any key to start" << endl;
    cin >> limit;

    wstringstream titleStream;
    titleStream << "Counting to " << limit << " goes here";
    SetConsoleTitle(titleStream.str().c_str());
    int x = 0;
    while (x >= 0)
    {
        cout << x << endl;
        x++;

        if (x == limit)
        {
            cout << "Reached limit of " << limit << endl;
            system("pause");
            system("cls");
            goto begin;
        }
    }
    system("pause");
    return 0;
}