C语言课设心得之Visual studio文件读写操作
适用于C语言课设排行榜的读取和打印
本文章不会耽误任何人做生意!
本人学艺不精,教程可能会有不严谨和错误的地方,希望大家多多批评,在评论区多多指出。需要视频教学的话,也可以联系我,我会考虑在b站出一些视频之类的,感谢!
目录
一.Visual Studio文件读取相关函数
1.使用方法
2.常见的错误(来自于同学们)
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);
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