6

我对编程相当陌生,但似乎该π(pi)符号不在ASCII处理的标准输出集中。

我想知道是否有办法让控制台输出π符号,以便表达有关某些数学公式的准确答案。

4

3 回答 3

3

我不太确定任何其他方法(例如使用 STL 的方法),但您可以使用 Win32 使用WriteConsoleW执行此操作:

HANDLE hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
LPCWSTR lpPiString = L"\u03C0";

DWORD dwNumberOfCharsWritten;
WriteConsoleW(hConsoleOutput, lpPiString, 1, &dwNumberOfCharsWritten, NULL);
于 2013-01-17T10:05:31.867 回答
1

Microsoft CRT 不是很熟悉 Unicode,因此可能需要绕过它并WriteConsole()直接使用。我假设您已经为 Unicode 编译,否则您需要显式使用WriteConsoleW()

于 2013-01-17T10:03:29.203 回答
1

我正处于学习阶段,如果我有什么不对的地方,请纠正我。

看起来这是一个三步过程:

  1. 使用宽版本的 cout、cin、string 等。所以:wcout、wcin、wstring
  2. 在使用流之前,请将其设置为 Unicode 友好模式。
  3. 将目标控制台配置为使用支持 Unicode 的字体。

您现在应该能够摇滚那些时髦的 åäös。

例子:

#include <iostream>
#include <string>
#include <io.h>

// We only need one mode definition in this example, but it and several other
// reside in the header file fcntl.h.

#define _O_WTEXT        0x10000 /* file mode is UTF16 (translated) */
// Possibly useful if we want UTF-8
//#define _O_U8TEXT       0x40000 /* file mode is UTF8  no BOM (translated) */ 

void main(void)
{
    // To be able to write UFT-16 to stdout.
    _setmode(_fileno(stdout), _O_WTEXT);
    // To be able to read UTF-16 from stdin.
    _setmode(_fileno(stdin), _O_WTEXT);

    wchar_t* hallå = L"Hallå, värld!";

    std::wcout << hallå << std::endl;

      // It's all Greek to me. Go UU!
    std::wstring etabetapi = L"η β π";

    std::wcout << etabetapi << std::endl;

    std::wstring myInput;

    std::wcin >> myInput;

    std:: wcout << myInput << L" has " << myInput.length() << L" characters." << std::endl;

    // This character won't show using Consolas or Lucida Console
    std::wcout << L"♔" << std::endl;
}
于 2013-03-16T12:26:34.010 回答