C语言创建多个文件,命名,打开写入关闭及解决乱码问题

在我自己找了多种方法才解决问题后,我决定把这次过程记录下来,头疼。
代码

#include <stdio.h>
#include <stdlib.h>
#include<string.h>

int main()
{
int t = 10;
for (t;t<100 ; t++)
{
char str[20] = “D:\\upon\\”;
char T[10] = {};

	//命名	
	_itoa(t, T, 10);  //将int 类型转换成char类型 	
	strcat(str, T);   //将字符串连接起来
	strcat(str, ".txt");


	FILE *fp4 = fopen(str, "w+");   
	//打开文件。如果文件不存在,会自动创建,注意选择w 或者w+
	if (fp4 == NULL)
	{
		printf("%s", "Cannot open output file!\n");
		exit(0);
	}

	fputs("R", fp4);   //输入数据 
	fprintf(fp4, "%d\n", t);  
	fputs("Title = input success\n", fp4);

	fprintf(fp4, "%-5s", "t");   
	fprintf(fp4, "%s\n", "FD");

	fclose(fp4);   //关闭文件
}
system("pause");
return 0;

}

结果 部分截图
创建了多个.txt文件
在这里插入图片描述
在这里插入图片描述
不局限于.txt文件,也可生成.dat文件,
将.txt换成.dat。
在这里插入图片描述
在这里插入图片描述
注意用fputs()和fprintf(),不要用fwrite()。
用fwrite()写入时,打开.txt文件会出现乱码。

fprintf()函数用法
https://blog.csdn.net/u012707739/article/details/77806780

fputs()函数用法
http://c.biancheng.net/view/238.html
问题

1.为什么会出现乱码呢?
请看http://c.biancheng.net/cpp/html/2936.html

2.C语言中输出格式
请看这位大佬
https://blog.csdn.net/perfectguyipeng/article/details/77807012

3.如果执行时出现unsafe的报错
‘fopen’:this function or variable may be unsafe
请看这位大佬
https://www.cnblogs.com/hnzsb-vv1130/p/6592938.html

4.为什么fputs()的内容写不进去 ?

打开一个文件,会自动产生文件缓冲,缓冲的作用是降低磁盘IO,提升性能
fputs fwrite fprintf将数据写到文件缓冲中,若缓冲满,则会自动将数据同步到硬盘上去
fflush 强行将缓冲中的数据同步到硬盘上去
fclose 文件关闭前,会自动将缓冲中数据同步到硬盘

若要实时将数据写硬盘,在fputs fwrite fprintf后调用fflush
但这必然会导致磁盘IO上升,可能会影响性能,折中点,可以定期调用一次。
当然,如果不是性能要求很高的,那可以随便调
在这里插入图片描述
fflush()函数用法
具体https://blog.csdn.net/qq_34793133/article/details/85713413

5.如果出现itoa报错
error C4996: ‘itoa’: The POSIX name for this item is deprecated

我用的是VS2017,所以用itoa()就报错了,改成_itoa()就好啦。

老版本VS是可以用itoa(),新版本改了,用itoa()会报错。
新版本改用_itoa()了。
具体看这个
https://blog.csdn.net/zhao3132453/article/details/82955078

想到什么写什么。。。。。。
我一个学C++的,没学过C的发誓再也不难为自己了!!!
脑阔痛。。。。。。
在这里插入图片描述

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值