fgets函数可以输入中文吗(c语言中文字如何存储)

2026-09-06 08:30:01 :0

fgets函数可以输入中文吗(c语言中文字如何存储)

本篇文章给大家谈谈fgets函数可以输入中文吗,以及c语言中文字如何存储对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录

c语言中文字如何存储

可以用文件操作函数写入文件内储存。

1、C语言标准库提供了一系列文件操作函数。文件操作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdio.h头文件当中。例如:fopen、fclose函数用于文件打开与关闭;fscanf、fgets函数用于文件读取;fprintf、fputs函数用于文件写入;ftell、fseek函数用于文件操作位置的获取与设置。
2、例程:

#include《stdio.h》
int a;
char b,c;
int main(){
    FILE * fp1 = fopen("input.txt", "r");//打开输入文件
    FILE * fp2 = fopen("output.txt", "w");//打开输出文件
    if (fp1==NULL || fp2==NULL) {//若打开文件失败则退出
        puts("不能打开文件!");
        return 0;
    }
    fscanf(fp1,"%d",&a);//从输入文件读取一个整数
    b=fgetc(fp1);//从输入文件读取一个字符
    fgets(c,100,fp1);//从输入文件读取一行字符串
    
    printf("%ld",ftell(fp1));//输出fp1指针当前位置相对于文件首的偏移字节数
    
    fputs(c,fp2);//向输出文件写入一行字符串
    fputc(b,fp2);//向输出文件写入一个字符
    fprintf(fp2,"%d",a);//向输出文件写入一个整数
    
    fclose(fp1);//关闭输入文件
    fclose(fp2);//关闭输出文件,相当于保存
    return 0;
}

c语言中读取及输出汉字的问题

为了方便文本文件的操作,标准函数编程库提供了,行读写函数,
char *gets(char *s);
char *fgets(char *s, int n, FILE *stream);
-----------------------精通unix下c语言编程与项目实践P66
行输出函数族
int puts(const char *s);
int fputs(const char *s, FILE *stream);
-----------------------精通unix下c语言编程与项目实践P67
块读写函数
能够输入输出任意数量的字符,在操作二进制文件时常常使用,
fread 和fwrite
块读写函数经常操作二进制文件。
-----------------------精通unix下c语言编程与项目实践P70
再有就是编码的知识了
当你输出的ascii码在汉字的范围内的时候,汉字系统会认识到
然后把相应的ascii码变成汉字。

c语言 如何读取中文字符串

可以使用输入输出重定向来将TXT文本中的字符内容导入程序中,或者使用标准C库函数:fopen()和fgetc();
先使用fopen()函数打开TXT文本文件,然后使用fgetc读取文本文件中的字符。读取全部文本中全部字符可以使用一个while循环加判断是否读取到文件结尾来实现:
char ch;
while((ch= fgetc(fp)) != EOF)
这样当读取到文件结尾时,while循环就会终止。
C语文编写编译如下:
#include 《stdio.h》
#include 《stdlib.h》
#include 《string.h》
#define MAXLINE 100000
#define BUFLEN 1024
int main()
{
FILE *file;
char buf;
int len=0,i=0;
char *array;
file=fopen("test.txt","r");//打开TXST.TxT文件
if(!file)return -1;
while(fgets(buf,BUFLEN,file))//读取TXT中字符
{
len=strlen(buf);
array=(char*)malloc(len+1);
if(!array)break;
strcpy(array,buf);
}
fclose(file);
i--;
while(i》=0&&array)
{
printf("%s\n",array);//打印test文档的字符
free(array);
}
}

将一句中文隐藏在c语言代码中

呵呵,写好了,完全符合你的要求,程序运行后你输入一段文字,然后它会自动进行转码并输出到save.txt中, 程序如下:
//这个程序只能对一段文字进行转码,若有多段,则用下面一个程序吧
#include 《stdio.h》
#include 《stdlib.h》
#include 《string.h》
#define MAX_SIZE 500
void convert(char *str) //将中文进行转码
{
FILE *fp;
fp = fopen("save.txt", "w");
if(!fp)
{
printf("创建save.txt文件失败!\n");
exit(0);
}
while(*str)
{
fprintf(fp, "\\x%02x", (unsigned char)*str++);
}
fclose(fp);
}
int main()
{
char str = "", *p;
printf("请输入一段中文(不超过%d个字符):\n", MAX_SIZE);
fgets(str, sizeof(str), stdin);
//fgets函数会接收回车符,可以用strchr函数在str中去找’\n’的位置,它会返回该位置的指针,如找不到则返回NULL
p = strchr(str, ’\n’);
if(p)
{
*p = ’\0’; //去除回车符
}
convert(str);
printf("\n\t转换成功!已存至与本源文件同一目录下的save.txt中!\n");
return 0;
}
//这个程序可对多段文字进行转码,把要转码的文字存放于与本源文件同一目录下的load.txt中即可
#include 《stdio.h》
#include 《stdlib.h》
#include 《string.h》
void convert()
{
char ch, escp;
FILE *fp_load, *fp_save;

fp_load = fopen("load.txt", "r");
if(!fp_load)
{
printf("无法打开load.txt文件!\n");
exit(0);
}
fp_save = fopen("save.txt", "w");
if(!fp_save)
{
printf("创建save.txt文件失败!\n");
exit(0);
}
while(!feof(fp_load))
{
ch = fgetc(fp_load);
sprintf(escp, "\\x%02x", (unsigned char)ch);
fprintf(fp_save, escp);
}
fclose(fp_save);
fclose(fp_load);
}
int main()
{
printf("该程序为中文转码程序.\n");
printf("把你要转换的中文存放至与本源文件处于同一目录下的load.txt中.\n");
printf("准备就绪后,按回车键开始!\n");
getchar();
convert();
printf("\n\t转换成功!已存至与本源文件同一目录下的save.txt中!\n");
return 0;
}
//当然,能将文件中的中文进行转码成\xhh形式,肯定也能对这样形式的文件进行反转码成中文,经过我一天一夜的编程,终于实现了,也一并给你吧.如果你觉得没必要的话就不用看下面这代码了:
#include 《stdio.h》
#include 《stdlib.h》
#include 《string.h》
#include 《math.h》
#define OCTAL 8 //八进制
#define HEX 16 //十六进制
int to_decimal(int scale, const char *str, int len) //将长度为len的scale进制字符串转换成十进制
{
int i;
double sum;
sum = 0;
if(HEX == scale)
{
for(i=0; i《len; i++)
{
if((str《= ’9’))
{
sum += (str-’0’) * pow(HEX, len-i-1);
}
else if((str 《= ’f’))
{
sum += (10+str-’a’) * pow(HEX, len-i-1);
}
else if((str 《= ’F’))
{
sum += (10+str-’A’) * pow(HEX, len-i-1);
}
}
}
else if(OCTAL == scale)
{
for(i=0; i《len; i++)
{
sum += (str-’0’) * pow(OCTAL, len-i-1);
}
}
return (int)sum;
}
char convert(const char *escp_str) //将转义系列转换成对应转义后的字符
{
switch(escp_str)
{
case ’a’:
return ’\a’;
case ’b’:
return ’\b’;
case ’f’:
return ’\f’;
case ’n’ :
return ’\n’;
case ’r’:
return ’\r’;
case ’t’:
return ’\t’;
case ’v’:
return ’\v’;
case ’\\’:
return ’\\’;
case ’\’’:
return ’\’’;
case ’\"’:
return ’\"’;
case ’x’:
return to_decimal(HEX, escp_str+1, strlen(escp_str+1));
default:
return to_decimal(OCTAL, escp_str, strlen(escp_str));
}
}
void get_escp_str(FILE *fp, char *escp_str) //提取转义系列,将其存放至escp_str
{
int i;
escp_str = fgetc(fp);
switch(escp_str)
{
case ’a’: case ’b’: case ’f’: case ’n’ : case ’r’: case ’t’: case ’v’:
case ’\\’: case ’\’’: case ’\"’:
return;
case ’x’: //十六进制转义除去从escp_str),如’x000000aa’,则只读取’xaa’
for(i=1; i《3; i++)
{
escp_str = fgetc(fp);
if(EOF == escp_str)
{
escp_str = ’\0’;
return;
}
if(1 == i)
{
while(’0’ == escp_str开始连续的0
{
escp_str = fgetc(fp);
if(EOF == escp_str)
{
escp_str = ’\0’;
return;
}
}
}
if(((escp_str 》 ’f’))
&& ((escp_str 》 ’F’)))
{
fseek(fp, -1, SEEK_CUR);
escp_str = ’\0’;
return;
}
}
escp_str = ’\0’;
return;
default: //八进制转义码最多读取三位(包括escp_str)
for(i=1; i《3; i++)
{
escp_str = fgetc(fp);
if(EOF == escp_str)
{
escp_str = ’\0’;
return;
}
if((escp_str 》 ’7’))
{
escp_str = ’\0’;
fseek(fp, -1, SEEK_CUR);
return;
}
}
escp_str = ’\0’;
}
}
int is_escp_str(FILE *fp) //判断当前文件指针所指向字符是否开始转义
{
int ch;
if(EOF == (ch = fgetc(fp)))
return -1;
if(’\\’ != ch)
{
fseek(fp, -1, SEEK_CUR); //让文件指针fp重新指向字符ch
return 0;
}
if(EOF == (ch = fgetc(fp)))
return -1;
fseek(fp, -1, SEEK_CUR);
switch(ch)
{
case ’a’: case ’b’: case ’f’: case ’n’ : case ’r’: case ’t’: case ’v’:
case ’\\’: case ’\’’: case ’\"’: case ’0’: case ’1’: case ’2’: case ’3’:
case ’4’: case ’5’: case ’6’: case ’7’: case ’x’:
return 1;
}
return -1;
}
void convert_escape_str() //对转义字符串进行还原
{
char ch;
int res; //response,返回值
char escp_str = "";
FILE *fp_load, *fp_save;

fp_load = fopen("load.txt", "r");
if(!fp_load)
{
printf("无法打开load.txt文件!\n");
exit(0);
}
fp_save = fopen("save.txt", "w");
if(!fp_save)
{
printf("创建save.txt文件失败!\n");
exit(0);
}
while(!feof(fp_load))
{
res = is_escp_str(fp_load); //判断当前文件指针所指向字符是否开始转义
if(-1 == res)
continue;
else if(0 == res)
{
ch = fgetc(fp_load);
fputc(ch, fp_save);
}
else if(1 == res)
{
get_escp_str(fp_load, escp_str); //提取转义系列
fputc(convert(escp_str), fp_save); //将转义系列转换成对应转义后的字符写入save.txt
}
}
fclose(fp_save);
fclose(fp_load);
}
int main()
{
printf("该程序为转义字符串输出程序.\n");
printf("把你要输出的转义字符串存放至与本源文件处于同一目录下的load.txt中.\n");
printf("准备就绪后,按回车键开始!\n");
getchar();
convert_escape_str();
printf("\n\t转换成功!结果已存至与本源文件同一目录下的save.txt中!\n");
return 0;
}
若还有要求请追问:

c语言中用fgets从txt文件中获取中文字符串,一个中文是按两个字节还是三个字节来算

检查原始txt文件的编码格式,用记事本打开后另存为ANSI编码的文本文件,之后再重新尝试。
如果你安装了十六进制器,例如UltraEdit,也可以直接打开原始txt文档查看一下编码是什么样的,也可以直接输入汉字更改。

以上就是我们为大家找到的有关“fgets函数可以输入中文吗(c语言中文字如何存储)”的所有内容了,希望可以帮助到你。如果对我们网站的其他内容感兴趣请持续关注本站。

fgets函数可以输入中文吗(c语言中文字如何存储)

本文编辑:admin

更多文章:


dul是什么意思(nsk轴承dul和sul的区别)

dul是什么意思(nsk轴承dul和sul的区别)

其实dul是什么意思的问题并不复杂,但是又很多的朋友都不太了解nsk轴承dul和sul的区别,因此呢,今天小编就来为大家分享dul是什么意思的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录nsk轴承dul和sul

2026年5月15日 15:30

中国移动个人主页(中国移动我的页面在哪打开)

中国移动个人主页(中国移动我的页面在哪打开)

本篇文章给大家谈谈中国移动个人主页,以及中国移动我的页面在哪打开对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录中国移动我的页面在哪打开中国

2026年1月3日 16:15

grocery联想记忆(grocery怎么拆分记忆)

grocery联想记忆(grocery怎么拆分记忆)

本篇文章给大家谈谈grocery联想记忆,以及grocery怎么拆分记忆对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录grocery怎么拆

2025年8月26日 06:00

gridview排序功能属性(怎么把datagridview中的自动排序功能禁用)

gridview排序功能属性(怎么把datagridview中的自动排序功能禁用)

大家好,如果您还对gridview排序功能属性不太了解,没有关系,今天就由本站为大家分享gridview排序功能属性的知识,包括怎么把datagridview中的自动排序功能禁用的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始

2025年6月15日 08:45

易语言主程序和dll通讯(C+的dll如何用易语言正确调用)

易语言主程序和dll通讯(C+的dll如何用易语言正确调用)

今天给各位分享C+的dll如何用易语言正确调用的知识,其中也会对C+的dll如何用易语言正确调用进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录C+的dll如何用易语言正确调用易语言如何调用dll文件易语言如何

2026年4月8日 14:30

strut是什么车(这是什么品牌的车标)

strut是什么车(这是什么品牌的车标)

大家好,strut是什么车相信很多的网友都不是很明白,包括这是什么品牌的车标也是一样,不过没有关系,接下来就来为大家分享关于strut是什么车和这是什么品牌的车标的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!本文目录这

2026年8月3日 11:15

前端如何判断(如何判断一个前端人员的逻辑性)

前端如何判断(如何判断一个前端人员的逻辑性)

今天给各位分享如何判断一个前端人员的逻辑性的知识,其中也会对如何判断一个前端人员的逻辑性进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录如何判断一个前端人员的逻辑性前端如何判断当天是否签到怎样快速判断一个前端工

2026年9月24日 21:30

怎么制作网站ping工具(ping是什么 如何ping一个站点)

怎么制作网站ping工具(ping是什么 如何ping一个站点)

大家好,如果您还对怎么制作网站ping工具不太了解,没有关系,今天就由本站为大家分享怎么制作网站ping工具的知识,包括ping是什么 如何ping一个站点的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录ping是

2026年4月7日 09:15

前端样式网站(前端开发应该知道的几个CSS网页表单布局技巧)

前端样式网站(前端开发应该知道的几个CSS网页表单布局技巧)

今天给各位分享前端开发应该知道的几个CSS网页表单布局技巧的知识,其中也会对前端开发应该知道的几个CSS网页表单布局技巧进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录前端开发应该知道的几个CSS网页表单布局技

2026年2月10日 21:15

网址的url(网站URL:是什么)

网址的url(网站URL:是什么)

大家好,关于网址的url很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于网站URL:是什么的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录网站URL:是

2026年4月24日 04:30

flash模板照片幻灯片放映按钮代码解释?如何使用C#操作幻灯片

flash模板照片幻灯片放映按钮代码解释?如何使用C#操作幻灯片

大家好,如果您还对幻灯片代码不太了解,没有关系,今天就由本站为大家分享幻灯片代码的知识,包括flash模板照片幻灯片放映按钮代码解释的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录flash模板照片幻灯片放映按钮代

2025年7月24日 18:45

alarm和clock的区别(clock是什么意思英语)

alarm和clock的区别(clock是什么意思英语)

其实alarm和clock的区别的问题并不复杂,但是又很多的朋友都不太了解clock是什么意思英语,因此呢,今天小编就来为大家分享alarm和clock的区别的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录clo

2025年10月20日 22:00

delphi bit定义(delphi中如何定义TBitmap类型的变量)

delphi bit定义(delphi中如何定义TBitmap类型的变量)

各位老铁们,大家好,今天由我来为大家分享delphi bit定义,以及delphi中如何定义TBitmap类型的变量的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们

2025年11月14日 19:00

bankstatement中文(bank statement是什么意思)

bankstatement中文(bank statement是什么意思)

“bankstatement中文”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看bankstatement中文(bank statement是什么意思)!本文目录bank statement是什么意思签证所需要的bank s

2026年4月5日 01:45

linux如何编程(linux编程开发如何实现对智能手机的开发)

linux如何编程(linux编程开发如何实现对智能手机的开发)

“linux如何编程”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看linux如何编程(linux编程开发如何实现对智能手机的开发)!本文目录linux编程开发如何实现对智能手机的开发如何通过mac os系统学习linux系

2025年12月23日 13:00

compareto方法实现(java中compareto实现学生成绩排列)

compareto方法实现(java中compareto实现学生成绩排列)

大家好,今天小编来为大家解答以下的问题,关于compareto方法实现,java中compareto实现学生成绩排列这个很多人还不知道,现在让我们一起来看看吧!本文目录java中compareto实现学生成绩排列代码中是怎么调用compar

2026年4月28日 01:00

filterout(filter怎么记忆)

filterout(filter怎么记忆)

其实filterout的问题并不复杂,但是又很多的朋友都不太了解filter怎么记忆,因此呢,今天小编就来为大家分享filterout的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录filter怎么记忆filte

2026年3月30日 06:00

lodop插件怎么下载(clodop下载失败怎么回事)

lodop插件怎么下载(clodop下载失败怎么回事)

各位老铁们,大家好,今天由我来为大家分享lodop插件怎么下载,以及clodop下载失败怎么回事的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录cl

2026年3月11日 18:00

pgc中国参赛队伍(pnc全明星赛赛程)

pgc中国参赛队伍(pnc全明星赛赛程)

其实pgc中国参赛队伍的问题并不复杂,但是又很多的朋友都不太了解pnc全明星赛赛程,因此呢,今天小编就来为大家分享pgc中国参赛队伍的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录pnc全明星赛赛程PGC第三周周

2026年2月17日 03:45

win8如何重装系统(怎么重新安装win8系统|win8如何重新安装系统)

win8如何重装系统(怎么重新安装win8系统|win8如何重新安装系统)

大家好,win8如何重装系统相信很多的网友都不是很明白,包括怎么重新安装win8系统|win8如何重新安装系统也是一样,不过没有关系,接下来就来为大家分享关于win8如何重装系统和怎么重新安装win8系统|win8如何重新安装系统的一些知识

2026年5月29日 06:45

近期文章

本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索