文件流
来源:互联网 发布:js获取第二个子元素 编辑:程序博客网 时间:2024/06/05 07:40
很开心哈!困扰我很长时间的一个文件流的问题解决鸟!
问题源于英语老师让我帮忙给全班同学根据学号排序,然后把名单给她。一百来号人就这样给我人
工排序了!亏我还是学计算机滴!!!
现在来贴下我的代码:
- #include<fstream>
- #include<iostream>
- #include<string>
- using namespace std;
- struct node //学号、姓名
- {
- long s_id;
- char name[30];
- }date[43];
- inline void bubble_sort() //根据学号从小到大,冒泡排序
- {
- int i,j;
- node temp;
- for(i=0;i<43;i++)
- {
- for(j=42;j>i;j--)
- {
- if(date[j].s_id<date[j-1].s_id)
- {
- temp.s_id=date[j].s_id;
- strcpy(temp.name,date[j].name);
- date[j].s_id=date[j-1].s_id;
- strcpy(date[j].name,date[j-1].name);
- date[j-1].s_id=temp.s_id;
- strcpy(date[j-1].name,temp.name);
- }
- }
- }
- }
- inline void read_write() //文件读写
- {
- int i;
- ifstream infile;
- ofstream outfile;
- infile.open("C:\\Users\\Lenovo\\Desktop\\学号排序\\a.txt",ios::in);
- outfile.open("C:\\Users\\Lenovo\\Desktop\\学号排序\\b.txt",ios::out);
- if(!infile.is_open() || !outfile.is_open())
- {
- cerr<<"open error!"<<endl;
- exit(1);
- }
- for(i=0;i<43;i++)
- infile>>date[i].s_id>>date[i].name;
- bubble_sort();
- for(i=0;i<43;i++)
- outfile<<date[i].s_id<<" "<<date[i].name<<endl;
- infile.close();
- outfile.close();
- }
- int main()
- {
- read_write();
- return 0;
- }
排序前的 a.txt:
排序后的 b.txt:
(注:截图问题,文档中内容没能全部截下来,但已可以说明程序的正确性啦。)
代码就以43人为准啦。(小秘密:这是一班的人数,美女也最多)
在写代码的过程中还是有几点要注意的:
①如前所说,这个问题我很早就遇到了,当时刚接触C++,老师也不讲文件流这一部分。自己感觉
有点难了,也就搁置了!只想说:学习要抓紧点滴。不能有点难就不做啦。
②写的过程也非一番风顺的。
问题一:把 "C:\\Users\\Lenovo\\Desktop\\学号排序\\a.txt" 这个文件路径写成 "C:\Users\Lenovo\
Desktop\学号排序\a.txt" 。结果用is_open()函数发现文件老是打不开!费了很长时间才找到这个问题。关
键是很多教辅书也都是错误写法!!!
问题二:把上一个问题改对了之后,还有一个更让人无语的问题才渐渐浮出水面。我把自己电脑
设置成“隐藏文件扩展名”,结果老是打不开文件!改过来之后才可以滴。我觉得电脑几乎无所不能,关键
你要给出正确设置。系统越渐庞大,互相影响。个人觉得早晚是个问题。
后感:bug让人痛苦,debug了,又觉得一切值得。
欢迎拍砖!