C语言课设心得之Visual studio文件读写操作

C语言课设心得之Visual studio文件读写操作

前言:

适用于C语言课设排行榜的读取和打印

本文章不会耽误任何人做生意!

本人学艺不精,教程可能会有不严谨和错误的地方,希望大家多多批评,在评论区多多指出。需要视频教学的话,也可以联系我,我会考虑在b站出一些视频之类的,感谢!

目录

一.Visual Studio文件读取相关函数

1.使用方法

2.常见的错误(来自于同学们)


一.Visual Studio文件读取相关函数

1.使用方法

        VS为了所谓的“安全”,一切和输入输出等有关的函数都会加一个“_s”否则会导致编译不通过,有时候虽然通过了,但是BUG多多,很多小伙伴为此十分苦恼,我也是。这里教大家各个函数的用法,保证你的课设用这些就够了!

        fopen_s(打开文件):这个函数最好配合另一个“为了安全”的变量errno_t,咱们无需知道这个是干嘛的,写就对了

FILE* stream;
errno_t err;
// 下面的第二个参数就是你文件的地址,tops.dat是文件的名字和文件类型
// 用到的是绝对路径书写法,在C语言里面写路径的时候都需要转义来写“/”也就是写“//”
err = fopen_s(&stream, ".\\tops.dat", "r");
if (err)
{
    printf("文件打开失败!");
}
else
{
    printf("文件打开成功!");
}
// fopen的返回值是文件指针,而fopen_s的返回值是相应的错误代码,有助于排查问题
fseek(stream, 0L, SEEK_SET);

下面这个fseek的作用是,将stream指针指向文件的最开头,可以写也可以不写,但是为了避免以后好多错误,最好还是这么写以下。

打开文件的一些参数

r:只读,打开文件(文件必须存在)

w:只写,重写文件。若文件不存在则创建文件

a:只写,追加内容。若文件不存在则创建文件

上述的三个基础指令,可以加一些内容,成为进阶指令

附加“+”:以读/写的方式打开文件

附加“b”:打开/创建/写一个二进制文件

附加“t”:允许读写

注意:

a模式会保留原文件的EOF符

a+模式不会保留原文件的EOF符

        fscanf_s(从文件读取):这个函数变化不太大,很好理解,我们来看示例

文件示例:tops.txt

1 null 1000
2 null 1000
3 null 1000
4 null 1000
5 null 1000
6 null 1000
7 null 1000
8 null 1000
9 null 1000
10 null 1000
11 null 1000
12 null 1000

  代码示例

// p是一个结构体
/*
struct node{
    int no;
    char name[50];
    int score;
};
*/

fscanf_s(stream, "%d", &p.no);
fscanf_s(stream, "%s", p->name, _countof(p.name));
fscanf_s(stream, "%d", &p.score);

// 每一次fscanf_s,是读取到空格就会结束本次扫描,一旦碰到有字符的就读取,碰到空格结束读取,以此类推

这里值得注意的是,读取数组(字符串数组,int数组等都算)的时候,需要额外写一个_countof(数组名)的参数,不然会导致很多莫名其妙的错误。

非数组一定记得要取地址

        fprintf_s(往文件里写):我们创建一个叫tops.txt的文件,用下面的代码来写

fprintf_s(stream, "%d %s %d\n", q->no, q->name, q->score);

        fclose(关闭文件指针):这个和原来没有太大变化,每个文件读写完了一定记得紧接着就要close你的文件指针!否则会导致很多错误

fclose(stream);

2.常见的错误(来自于同学们)

 string subscript out of range

这种问题往往是你用来存储数据的数组长度不够,常见于char[]数组,解决这种问题的方法就是让你的数组变长,直接来一个char [200]吧!现在电脑CPU都这么强悍,你的这么点数组不会造成丝毫影响!

stream != nullptr 

有可能你打开文件的时候用错了模式,导致文件刚一读取就读取到了EOF符,大家写文件的时候,如果要用“a”模式,一定要用a+,而w不用担心这个问题。

还有可能是你忘记了fclose,切记,每当一个文件所有操作都结束了之后,一定要fclose,换模式读取同一个文件也不要偷懒!先close,再open!

还有一种可能,这一种可能的具体原因和错误原理我到现在还没有搞清楚,但是在自己尝试的时候却解决了,这就是一个文件指针用一次然后fclose之后就不用了,再打开文件就再创一个新的文件指针。

(无图)

stream.valid()

解决方法同上三条,这个问题是fseek函数会出现的错误代码之一

如图的错误,在我写这篇文章的时候,热心的L同学又来找我问问题了,这也是文件读写常见的错误,看起来错误很高级的样子,解决方法如何呢?

 

 看103行,写&写&写&&&&&&&&&&&&!!!!!!!!!!!!!!!!!!!

还有很多问题可能是我目前没遇到过的,因此没有在本文列出来,在此我非常抱歉。如果大家还有本文没有提到的问题出现的话,可以联系我,帮您解决问题之后我就会在本文添加对应内容。如果小伙伴们想要视频教学的话,可以私信我,感谢!

到这里,本文就到达尾声啦!希望本文章能帮助到大家!

特别鸣谢:

我的祖国

CSDN各位大佬的小教程帮助我完成了课设

C语言课设课及指导老师

河海大学童老师的网课

和我讨论的同学们,有L同学,W同学,L同学,Y同学,G同学等

我的b站UID:23415007

  • 9
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值