【发布时间】:2019-07-01 19:01:09
【问题描述】:
我正在尝试打印文本“Ääkkösiä ruutuun”。用 c++ 进行控制台。我有 Windows 7 并且正在使用 Code::Blocks 编辑器。搜索该主题,我发现这些行可能会有所帮助
_setmode(_fileno(stdout), _O_U16TEXT);
wstring s{L"Ääkkösiä ruutuun."};
wcout<<s<<endl;
但是当我尝试编译它时,我得到了错误:_fileno is not declared in this scope.
我拥有所有这些包括:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <stdexcept>
#include <cmath>
#include <sstream>
#include <fstream>
#include <codecvt>
#include <locale>
#include <fcntl.h>
#include <io.h>
#include <stdio.h>
#include <cstdio>
#include <ostream>
我错过了什么?
另外,我尝试过的另一件事是语言环境,但是没有找到 locale::empty!为什么我的 c++ 里面什么都没有?
编辑 这是我的程序现在正在做什么的图片。
它只打印第一个字母 (Ä)。其余的会怎样?
好的,似乎 setmode 设置它以便只打印一个字母。 (即使尝试使用多个命令打印普通文本,也只会产生一个字母。)没有它,斯堪的纳维亚字母就无法正确打印,想。它们看起来像这样:
【问题讨论】:
-
根据微软的说法,
_fileno在<stdio.h>中定义。根据 IBM 和其他公司的说法,它是fileno,没有定义下划线。 -
我都试过了,都没有找到。顺便说一句,为什么在 stdio 中需要 .h,因为例如在 "#include
? 中不需要 -
我认为你需要看看你的开发环境是如何配置的。听起来您的包含路径未定义。至于
<stdio>与<stdio.h>,嗯,前者是标准的,后者应该也可以工作。 -
您不需要
fileno(stdout)。在unistd.h中有一个STDOUT_FILENO(通常等于1)。 -
@Vovanium 好的,找到了。但是_O_U16TEXT呢?
标签: c++ windows console-application utf scandir