注册 登录
编程论坛 C++教室

中文变量

万致远醉帥 发布于 2020-04-08 11:12, 2319 次点击
#include<iostream>
#include<string>
#include <algorithm>
#include <vector>
#include <memory>
using namespace std;
int da()
{
    int n, max, b = 0, l = 2;
    cout << "有几个数";
    cin >> n;
    if (n < 2)
    {
        cout << "请尊重程序员,谢谢" << endl;
        system("pause");
        system("cls");
        return 1;
    }
    vector<double> a(n);
    for (b = 0; b < n; b++)
    {
        cout << "请输入第" << b + 1 << "个数";
        cin >> a[b];
    }
    max = a[0];
    for (b = 1; b < n; b++)
    {
        if (a[b] > max)
        {
            max = a[b];
            l = b;
        }
    }
    cout << "最大的数是" << max << "是第" << l + 1 << "个";
    while (true)
    {
        NULL;
    }
    return 0;
}

int main()
{
    const double i = 1.2;
    cout << "求最大/小数,作者:万致远 版本" << i << endl;
    char da_xiao;
    cin >> da_xiao;
    switch (da_xiao)
    {
    case '大':da(); break;
    case '小':cout << "新功能正在开发中,请等待。"; break;
    }
}char类型不能是中文,怎么办?
7 回复
#2
rjsp2020-04-08 12:12
'大' ——— 它的类型是int,一个char存不下。具体到编码,那是实现定义的。
你可以用 wchar_t、char16_t、char32_t 等,有时还需要设置locale,挺麻烦的。
#3
雪影辰风2020-04-08 12:15
回复 2楼 rjsp
你好,宽窄字节我学的不是很好
您的意思就是说,不能直接用'大'来表示,而是用十六进制数来表示吗?
#4
万致远醉帥2020-04-08 12:17
回复 2楼 rjsp
有点不太懂,可以在讲一下吗?
#5
叶纤2020-04-08 12:23
回复 3楼 雪影辰风
2楼已经说的很明白了,char装不下int的大小
#6
雪影辰风2020-04-08 12:24
回复 4楼 万致远醉帥
就是说,因为char是只占用一个字节的,我们叫做窄字节,而'大'这样的汉字,一个char装不下,所以需要用宽字节,也就是wchar_t类型
但是我最近测试发现好像不能用'大'来直接赋值,否则输出空白,可能是需要直接用16进制数来赋值,但是我试过,还是不行,我在想是不是用错编码了
我也不是很懂,具体看rjsp吧
#7
rjsp2020-04-09 10:53
以下是引用雪影辰风在2020-4-8 12:15:10的发言:

你好,宽窄字节我学的不是很好
您的意思就是说,不能直接用'大'来表示,而是用十六进制数来表示吗?

假如你用的是 VC,可以试试
程序代码:
#include <iostream>
#include <locale>
using namespace std;

int main( void )
{
    wcout.imbue( locale("") ); // 这一句很重要

    wchar_t da_xiao;
    if( !(wcin>>da_xiao) )
        return 1;

    switch (da_xiao)
    {
    case L'':
        wcout << L"你输入了\"大\"字\n";
        break;
    case L'':
        wcout << L"你输入了\"小\"字\n";
        break;
    default:
        wcout << L"你输入了\"" << da_xiao << L"\"字\n";
        break;
    }
}

假如你用的是mingw,比较麻烦,
将  wcout.imbue( locale("") ); 改为
    ios::sync_with_stdio(false);
    setlocale(LC_CTYPE, "");
如果还不行的话,编译参数增加 -fexec-charset=GBK; -finput-charset=UTF-8; 试试
#8
万致远醉帥2020-04-09 10:55
改好了,用字符串+if语句
void xiao()
{
    int n, min, b = 0, l = 2;
    cout << "有几个数";
    cin >> n;
    if (n < 2)
    {
        cout << "请尊重程序员,谢谢" << endl;
        system("pause");
        system("cls");

    }
    vector<double> a(n);
    for (b = 0; b < n; b++)
    {
        cout << "请输入第" << b + 1 << "个数";
        cin >> a[b];
    }
min = a[0];
    for (b = 1; b < n; b++)
    {
        if (a[b] < min)
        {
            min = a[b];
            l = b;
        }
    }
    cout << "最"; Sleep(500); cout << "小"; Sleep(500); cout << "的"; Sleep(500); cout << "数"; Sleep(500); cout << "是"; Sleep(500); cout << min;
    while (true)
    {
        NULL;
    }
}
int main()
{
    const double i = 1.2;
    cout << "正在加载中,请稍后。就一杯茶的功夫";
    Sleep(10000);
    cout << "求最大/小数,作者:万致远 版本" << i << endl;
    string da_xiao;
    cout << "求大?求小?";
    cin >> da_xiao;
    if (da_xiao=="大")
    {
        da();
    }
    else
    {
        if (da_xiao=="小")
        {
            xiao();
        }
        else
        {
            cout << "新功能正在开发中,或请更新版本";
        }
    }
}
1