很开心哈!困扰我很长时间的一个文件流的问题解决鸟!
问题源于英语老师让我帮忙给全班同学根据学号排序,然后把名单给她。一百来号人就这样给我人
工排序了!亏我还是学计算机滴!!!
现在来贴下我的代码:
#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了,又觉得一切值得。
欢迎拍砖!
本文介绍了一个利用C++解决文件流学号排序问题的经历。作者通过代码展示了如何将学号排序并保存到新文件中,过程中遇到文件路径错误和隐藏文件扩展名导致的打开文件问题,并分享了解决问题的体会。
6944

被折叠的 条评论
为什么被折叠?



