关于C语言将中文字符保存到TXT中或进行读取时的具体方法,与可能出现的问题及其解决方法

您所在的位置:网站首页 c文件读取字符串 关于C语言将中文字符保存到TXT中或进行读取时的具体方法,与可能出现的问题及其解决方法

关于C语言将中文字符保存到TXT中或进行读取时的具体方法,与可能出现的问题及其解决方法

2023-09-23 02:29| 来源: 网络整理| 查看: 265

对于一些初学C语言的小萌新们来说,在中文字符串对TXT文件进行输入、储存、读取这一系列的操作上可能会存在这么一些问题: 1.进行输入、储存后,打开在TXT文件一看,显示的是乱码; 2.在TXT文件中显示的是正确的中文字符,但是一读取,用printf一输出,显示的是乱码,或者是正确的中文字符夹杂着一堆“烫烫烫烫烫…”; 3.对输入中文字符时夹杂着的各种其他字符不知道怎么处理,诸如“安装a的”、“年成都2的”…新手可能会对怎么将他们中的其他字符剔除而只保留中文字符输入存在疑惑; 4.怎么让它在读取中文字符时自动读取的中文字数就是我上次输入的。

这些问题我在下面会进行相应的解答,并在最后放出可运行的代码示例。

首先,第一个问题,这个倒问题不大,出现这种情况一般来说可能有两种原 因:1.你的代码有问题,大问题上我现在也不知道你到底错在了哪里,这只能是你自己对比一下看看咯;2.你的TXT格式文件在创建时默认编码为UTF-8,这导致在读取文件时编码格式不对应而造成读取中文时出现乱码,这个你得把它改为ASNI编码格式,这样就解决了。 下图第一个就是对的,能正常显示写入的中文: 在这里插入图片描述 错误案例图: 在这里插入图片描述

第二个问题,就是你用来读取保存中文字符串的字符数组只声明创建而不进行初始化赋值导致的,你只要对那个字符数组进行初始化赋值应该就没问题了。如:原本是“ char s[1000]; ” ,改成“ char s[1000]=“s”; ”就行了。

第三个问题,就要结合我们的ASCII码,我们常见的各种字符,包括数字、英文字母、《》、= 3000) { printf("您想要输入的汉字过多,已超出最大字数限度,请重新输入"); printf("\n"); } if (c 0 && c 0 && china_name_writer_long_number = 3000) { printf("您想要输入的汉字过多,已超出最大字数限度,请重新输入,可分批输入"); printf("\n"); } printf("\n"); } printf("\n"); printf("请输入中文:"); gets_s(china_name_writer); printf("\n"); printf("%s", china_name_writer); FILE *fp; fopen_s(&fp, "hanzi.txt", "wt+"); fwrite(china_name_writer, china_name_writer_long_number * sizeof(char), 1, fp); fclose(fp); /// //写入、保存数字数据 std::string num_str = std::to_string(china_name_writer_long_number / 2); const char *num_str_char = num_str.c_str(); FILE *fp_shuzi; fopen_s(&fp_shuzi, "shuzi.txt", "wt+"); int name_number_long = strlen(num_str_char); switch (name_number_long) { case 1: fwrite(num_str_char, sizeof(char), 1, fp_shuzi); fclose(fp_shuzi); break; case 2: fwrite(num_str_char, 2 * sizeof(char), 1, fp_shuzi); fclose(fp_shuzi); break; case 3: fwrite(num_str_char, 3 * sizeof(char), 1, fp_shuzi); fclose(fp_shuzi); break; case 4: fwrite(num_str_char, 4 * sizeof(char), 1, fp_shuzi); fclose(fp_shuzi); break; case 5: fwrite(num_str_char, 5 * sizeof(char), 1, fp_shuzi); fclose(fp_shuzi); break; default: break; } } void china_name_read(std::string input_output) { std::string num_read_str; //读取数字 //在这里对这个数组变量进行初始化赋值是必须的,你付给它们对应的什么值都行,但一定要赋值 //否则你读取TXT文件后用printf显示的时候会发现:它们存在乱码! char num_read_char[1000] = "s"; FILE *fp_num_read; fopen_s(&fp_num_read, "shuzi.txt", "rt+"); fread(num_read_char, 1000 * sizeof(char), 1, fp_num_read); fclose(fp_num_read); int num_read = 0; for (int r = 0; r < 1000 && num_read_char[r] != '\0'; r++) { if (num_read_char[r] == '\0' || (int)num_read_char[r]57) { break; } //&& (int)num_read_char[r] >= 0 if (num_read_char[r] != '\0' && (int)num_read_char[r] >= 48 && (int)num_read_char[r] = 48 && (int)num_read_char[r + 1]



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3