我想在Windows命令提示符下更改特定的单词颜色,它就像这样工作就好了:
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
string setcolor(unsigned short color){
HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hcon, color);
return "";
}
int main(int argc, char** argv)
{
setcolor(13);
cout << "Hello ";
setcolor(11);
cout << "World!" << endl;
setcolor(7);
system("PAUSE");
return 0;
}
但我希望我的功能像这样工作
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
string setcolor(unsigned short color){
HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hcon, color);
return "";
}
int main(int argc, char** argv)
{
cout << setcolor(13) << "Hello " << setcolor(50) << "World!" << setcolor(7) << endl;
system("PAUSE");
return 0;
}
当我运行它时,只有setcolor(13)工作,然后颜色永远不会改变直到最后,我该怎么做才能解决这个问题
答案 0 :(得分:1)
我的评论可能有误, 可能 可以使用I / O操纵器(例如std::setw
和家人):
struct setcolor
{
int color;
setcolor(int c) : color(c) {}
std::ostream& operator()(std::ostream& os)
{
HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hcon, color);
return os;
}
};
像以前一样使用它:
std::cout << "Hello " << setcolor(50) << "world\n";
注意: 我不知道这是否有用,因为我还没有测试过。
你现在使用当前代码的问题(如问题所示)是setcolor
是一个返回字符串的普通函数,你只需调用函数并打印它们的返回值(空字符串) )。
答案 1 :(得分:0)
您需要将输出放入单独的函数中:
void WriteInColor(unsigned short color, string outputString)
{
HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hcon, color);
cout << outputString;
}
然后你可以打电话
int main(int argc, char** argv)
{
WriteInColor(13, "Hello");
WriteInColor(50, "World");
WriteInColor(7, "\r\n");
}
仍然不是一个单行,但比你的第一个选择更清洁:)