wchar_t宽字符多格式基本使用(定义输入输出)

此数据类型主要解决汉字的问题吧。

理论方面我转载其他优秀博主的博客,我这里就直接贴代码讲解具体使用吧,

另外,宽字符录入(输入)的问题,我找遍全网也没见得可以用的,

确实是有wscanf函数,但是没有函数使用样例和报错解决办法,实在让人为难,于是自己去翻函数库一个个找,,,才找到(原创不易啊)

另外,所用函数是vs提供,所以可能会有其他编译器无法使用的情况,故特别补充非vs编译器可以使用的版本如下:

(选用Dev为样例)

#include<iostream>
#include<cstdio>
#include<locale.h>
#include<windows.h> 
using namespace std;
int main()
{
    _wsetlocale(LC_ALL, L"chs");//或者 setlocale(LC_ALL, "chs");
    //若删除上句,仍能输出整个汉字语句,但不能单独 使用/输出 一个汉字 
    
    wchar_t s[5][81];
    /*方式1 
    wcin >> s;
    wcout << s << endl;
    */
    /*方式2 
    _getws(s);
    wprintf(L"%ls
", s);
    */
    system("pause>nul");
    return 0; 
}
简单易懂

vs代码如下:

#include<iostream>
#include<locale.h>
#include<stdio.h>
#include<Windows.h>
using namespace std;
locale loc("chs");
/*
//语句需要:
#include<locale.h>
locale loc("chs");
_wsetlocale(LC_ALL, L"chs");//或者setlocale(LC_ALL, "chs");
wcout.imbue(loc);
*/
int main()
{
    _wsetlocale(LC_ALL, L"chs");//或者setlocale(LC_ALL, "chs");
    wcout.imbue(loc);

    wchar_t s[] = L"我爱你";
    wchar_t S[] = L"你爱我吗";
    /*
    _getws_s(s);//输入类型1
    wcin >> s;//输入类型2
    */
    wprintf(L"%ls
", S);
    wprintf(L"%s
", S);
    printf("%S
", S);
    /* %s 和 %S 输出区别是:
    %s窄字符输出,
    %ls宽字符输出,
    %S输出与输出函数相反宽度的字符格式
    (也就是printf因为默认支持的宽度是单字符,而%S偏要使用相反的,那么就
    使用宽字符格式输出,而wprintf默认支持的宽度是宽字节,%S偏要使用相反的,
    意思就是使用单字符格式输出)
    */
    system("pause>nul");//输出类型1

    wcout << s << endl;
    system("pause>nul");//输出类型2

    putwchar(s[2]);//或者printf("%lc",s[2]);
    wcout <<'
'<< S[0] << endl;
    puts((s[2] == S[0])?"yes":"no");
    system("pause>nul");//简单理解使用

    return 0;
}
c++

详细宽字符及其衍生函数:https://www.cnblogs.com/lanhaicode/p/10574260.html

_wsetlocale(LC_ALL, L"chs")//setlocale(LC_ALL, "chs")简单说明及char与wchar_t转换:https://www.cnblogs.com/zplutor/archive/2010/11/27/1889227.html

路过点个赞?

原文地址:https://www.cnblogs.com/Renhr/p/13451735.html