鱼C论坛

 找回密码
 立即注册
查看: 1062|回复: 17

[已解决]关于单个中文字符的输出

[复制链接]
发表于 2021-7-31 11:08:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
怎么写才能输出第三行第二个汉字

#include<stdio.h>

int main()
{
    char* a[] = {
        "I love FishC.com!",
        "Everything is possible!",
        "一切皆有可能!",
        "关于指针数组的应用问题",
        "二维数组也可以被指针数组代替"
    };
    char b[][30] = {
        "I love FishC.com!",
        "Everything is possible!",
        "一切皆有可能!",
        "关于指针数组的应用问题",
        "二维数组也可以被指针数组代替"
    };

    int i, j;


    printf("a首字母 = %c,b首字母 = %c\n",a[0][0],b[0][0]);
    printf("a首行 = %s,b首行 = %s\n",a[0],b[0]);

    printf("a第二行第三个字母 = %c,b第二行第三个字母 = %c\n",a[1][2],b[1][2]);
    printf("a第三行第二个汉字 = %c%c,b第三行第二个汉字 = %c%c\n",a[2][1],b[2][1]);

    printf("a第三行 = %s,b第三行 = %s\n",a[2],b[2]);
    printf("a第二行 = %s,b第二行 = %s\n",a[1],b[1]);


    for (i = 0; i < 5; i++)
    {
        printf("a完整输出 = %s,b完整输出 = %s\n",a[i],b[i]);
    }



    return 0;
}
最佳答案
2021-7-31 22:17:28
如果你那边的中文是两个字节的话
#include<stdio.h>

int main()
{
    char* a[] = {
        "I love FishC.com!",
        "Everything is possible!",
        "一切皆有可能!",
        "关于指针数组的应用问题",
        "二维数组也可以被指针数组代替"
    };
    char b[][43] = {
        "I love FishC.com!",
        "Everything is possible!",
        "一切皆有可能!",
        "关于指针数组的应用问题",
        "二维数组也可以被指针数组代替"
    };
    printf("第三行第二个汉字: ");
    printf("%c%c\n", a[2][2], a[2][3]);
    printf("第三行第二个汉字: ");
    printf("%c%c\n", b[2][2], b[2][3]);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-31 13:52:33 | 显示全部楼层
[2][1]没错呀。
不过中文可能不是单个字符所以输出不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-31 17:47:17 | 显示全部楼层
#include<stdio.h>

int main()
{
    char* a[] = {
        "I love FishC.com!",
        "Everything is possible!",
        "一切皆有可能!",
        "关于指针数组的应用问题",
        "二维数组也可以被指针数组代替"
    };
    char b[][43] = {
        "I love FishC.com!",
        "Everything is possible!",
        "一切皆有可能!",
        "关于指针数组的应用问题",
        "二维数组也可以被指针数组代替"
    };
    printf("第三行第二个汉字: ");
    printf("%c%c%c\n", a[2][3], a[2][4], a[2][5]);
    printf("第三行第二个汉字: ");
    printf("%c%c%c\n", b[2][3], b[2][4], b[2][5]);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-31 17:51:37 | 显示全部楼层
代码是对的啊 我用vs2017可以输出

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-31 21:57:17 | 显示全部楼层

这个不行啊,输出的还是和原来一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-31 21:58:01 | 显示全部楼层
本帖最后由 焦糖橙子 于 2021-7-31 21:59 编辑
热心小胡 发表于 2021-7-31 17:51
代码是对的啊 我用vs2017可以输出


啊,我用的VS2019,输出的“换”和“?”

Screenshot 2021-07-31 215919.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-31 21:58:50 | 显示全部楼层
万千只cnm 发表于 2021-7-31 13:52
[2][1]没错呀。
不过中文可能不是单个字符所以输出不了

我也感觉,中文确实是两个字节的,但是就没有只输出某个字的方法吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-31 22:16:02 | 显示全部楼层
焦糖橙子 发表于 2021-7-31 21:58
我也感觉,中文确实是两个字节的,但是就没有只输出某个字的方法吗
#include <stdio.h>
#include <string.h>

int main(void) {
    const char *str = "你好,世界 - hello world!";
    size_t size = strlen(str);
    for(size_t i = 0; i < size; ++i) {
        printf("%.2x ", (unsigned char)str[i]);
    }
    printf("\n");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-31 22:17:28 | 显示全部楼层    本楼为最佳答案   
如果你那边的中文是两个字节的话
#include<stdio.h>

int main()
{
    char* a[] = {
        "I love FishC.com!",
        "Everything is possible!",
        "一切皆有可能!",
        "关于指针数组的应用问题",
        "二维数组也可以被指针数组代替"
    };
    char b[][43] = {
        "I love FishC.com!",
        "Everything is possible!",
        "一切皆有可能!",
        "关于指针数组的应用问题",
        "二维数组也可以被指针数组代替"
    };
    printf("第三行第二个汉字: ");
    printf("%c%c\n", a[2][2], a[2][3]);
    printf("第三行第二个汉字: ");
    printf("%c%c\n", b[2][2], b[2][3]);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-1 09:06:26 | 显示全部楼层
人造人 发表于 2021-7-31 22:17
如果你那边的中文是两个字节的话


中文占的字节数不是统一两个字节的吗?
还是说这个是由编译器规定的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-1 09:42:04 | 显示全部楼层
焦糖橙子 发表于 2021-8-1 09:06
中文占的字节数不是统一两个字节的吗?
还是说这个是由编译器规定的?

不是,这和文件的编码有关,在我这边是3个字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-1 09:43:19 | 显示全部楼层
焦糖橙子 发表于 2021-8-1 09:06
中文占的字节数不是统一两个字节的吗?
还是说这个是由编译器规定的?
$ cat main.c
#include <stdio.h>
#include <string.h>

int main(void) {
    const char *str = "你好,世界 - hello world!";
    size_t size = strlen(str);
    for(size_t i = 0; i < size; ++i) {
        printf("%.2x ", (unsigned char)str[i]);
    }
    printf("\n");
    return 0;
}
$ gcc -g -Wall -o main main.c
$ ./main
e4 bd a0 e5 a5 bd ef bc 8c e4 b8 96 e7 95 8c 20 2d 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 21
$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-1 09:45:20 | 显示全部楼层
在小甲鱼的widows程序设计课程第二节里面有讲怎么单独输出一个汉字
#include <stdio.h>
#include <wchar.h>
#include <locale.h>

int main(void)
{
        wchar_t c = L'爱';
        setlocale(LC_ALL, "Chs");
        wprintf(L"%lc\n", c);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-1 09:46:14 | 显示全部楼层
$ file main.c
main.c: C source, UTF-8 Unicode text
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-1 16:12:14 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-1 16:13:12 | 显示全部楼层
热心小胡 发表于 2021-8-1 09:45
在小甲鱼的widows程序设计课程第二节里面有讲怎么单独输出一个汉字
#include
#include

你用的是C语言吗,有点看不懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-1 19:46:23 | 显示全部楼层
焦糖橙子 发表于 2021-8-1 16:13
你用的是C语言吗,有点看不懂了

是的 不过要运用到windows程序设计的知识 里面就讲到了汉字的编码问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-2 09:02:18 | 显示全部楼层
热心小胡 发表于 2021-8-1 19:46
是的 不过要运用到windows程序设计的知识 里面就讲到了汉字的编码问题


好吧。我刚入门,估计学到后面就懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 22:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表