关于文件的读操作和写操作。真的搞不懂

奥利奥小新 2011-06-04 01:55:06
在算法书上给出的一个题目需要由文件input.txt提供输入数据,将计算所得的数输出到文件out.txt.我是不是需要自己编在哪里编写一个文件提供输出,我不知道呢个文件的路径该放在哪里?代码里需要提路径的事对吗?我在百度上查看freopen,看不太懂。。
以下是我自己编的代码,照猫画虎的写了一个文件输入输出,貌似是错的,谁来点播一下我啊。
#define LOCAL
#include <iostream>
#include <cstdlib>
#include <math.h>
using namespace std;

//转换递增量的函数。
int round(float r) {
return static_cast<int>((r > 0.0) ? floor(r + 0.5) : ceil(r - 0.5));
}




int main(){
#ifdef LOCAL
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif
int a[]={13, 14 ,94 ,33 ,82 ,25, 59 ,94, 65, 23, 45, 27, 73 ,25, 39, 10 };
int num=sizeof(a)/sizeof(a[0]);

// inc = num/2;//不可以轻易的将递增量用数组的总数目除以2,有可能数目是奇数,那么将得到4.5这样的尴尬数字
int inc=round(static_cast<float>(num/2.0));
cout<<"inc="<<inc<<endl<<endl;
while (inc>0){
for(int i=inc;i<=num-1;++i){ //遍历数组的从第一个递增量开始的每一个元素。
int temp=a[i]; //保存该元素
int j=i; //记录该元素的下角标
while((j>=inc) && (a[j-inc]>temp)){
//当角标J-INC>=0时,并且所保存的数字比希尔排序递增量所对应的J-INC,大时进行循环移动。

a[j]=a[j-inc];
j=j-inc;
}
//将所寄存的数字插入到A【j】当中
a[j]=temp;
}

inc=round(static_cast<float>(inc/2.2));
cout<<"inc="<<inc<<endl<<endl;

}
cout<<"the shelled sort is:"<<endl;
for(int i=0;i<num;++i)
cout<<a[i]<<" ";
cout<<endl;
system("pause");
return 0;
}



...全文
104 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
vanterry5 2011-06-06
  • 打赏
  • 举报
回复
你这个就是一个重定向函数。
目录就是当前工作目录,即使一个工程中存在多个源文件也可以使用。
pause放在最后的目的是不让控制台消失,如果你想暂停,可以放在合适的位置。
你无非在做一个shell排序,将结果写道输出文件中,数组都定义好了,当然不需要第一个文件了。并且程序中也没用到。
当然是txt,改后缀就好了嘛。
-_-#
奥利奥小新 2011-06-06
  • 打赏
  • 举报
回复
我想问一下。我现在不想让程序从数组当中读数据了,想从data.in这个文件当中读取,那么我现在需要在data.in这个文档当中把那数组当中的数字都一一写成这种格式吗?
13 14 94 33 82 25 59 94 65 23 45 27 73 25 39 10

之后我在源程序当中又把数组那行改为了
int a[16];//={13, 14 ,94 ,33 ,82 ,25, 59 ,94, 65, 23, 45, 27, 73 ,25, 39, 10 };
int num=sizeof(a)/sizeof(a[0]);

但是在输出文件当中就出现了问题,希尔排序的最终结果是一些随机产生的数字,并且没有序
inc=8

inc=4

inc=2

inc=1

inc=0

the shelled sort is:
-776121986 -2 0 0 2 43 172 180 2293560 2293616 6302064 9120248 9120440 2003212506 2003279645 2003280122
请按任意键继续. . .


我该则么样在data.in中写内容,才能让程序知道我是读的是数组当中的数字呢?
万分感谢你。。


[Quote=引用 8 楼 vanterry5 的回复:]
你这个就是一个重定向函数。
目录就是当前工作目录,即使一个工程中存在多个源文件也可以使用。
pause放在最后的目的是不让控制台消失,如果你想暂停,可以放在合适的位置。
你无非在做一个shell排序,将结果写道输出文件中,数组都定义好了,当然不需要第一个文件了。并且程序中也没用到。
当然是txt,改后缀就好了嘛。
-_-#
[/Quote]
奥利奥小新 2011-06-04
  • 打赏
  • 举报
回复
对了,我查看了一下资料,看到说:如果输入文件在运行是不存在的话,会报错,原因是无法打开一个不存在的文件。但是我在之前并没有创建这个data.in文件,却正确运行了,这是为什么呢?
并且我刚试图创建文件可是后缀名不能是in . 那么我需要创建一个text类型的文件吗?

[Quote=引用 6 楼 dizuo 的回复:]
引用 5 楼 shaoxin0827 的回复:

那我为什么找不到“data.in”这个文件呢?是需要我在运行我自己的程序之前,自己用记事本创建一组数据吗?
引用 2 楼 bdmh 的回复:
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
这里没有指定绝对路径,那么它就在你的程序同目录下,如果要指定其他路径,可……
[/Quote]
ryfdizuo 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 shaoxin0827 的回复:]

那我为什么找不到“data.in”这个文件呢?是需要我在运行我自己的程序之前,自己用记事本创建一组数据吗?
引用 2 楼 bdmh 的回复:
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
这里没有指定绝对路径,那么它就在你的程序同目录下,如果要指定其他路径,可以写完整的
[/Quote]
恩,是的,输入文件在程序运行时必须存在啊。
奥利奥小新 2011-06-04
  • 打赏
  • 举报
回复
那我为什么找不到“data.in”这个文件呢?是需要我在运行我自己的程序之前,自己用记事本创建一组数据吗?
[Quote=引用 2 楼 bdmh 的回复:]
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
这里没有指定绝对路径,那么它就在你的程序同目录下,如果要指定其他路径,可以写完整的
[/Quote]
奥利奥小新 2011-06-04
  • 打赏
  • 举报
回复
如果在这个文件夹里面还有很多其他的程序,例如:123.cpp 456.cpp 那么我在编写123.cpp的时候也能用
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
这两句话吗?
并且还有一个问题就是,我在和我程序同级的目录当中找到了data.out 这个文件,其中的数据是我程序运行的最终结果,为什么我在程序的最终添加了
system("pause");
return 0;
程序却无法暂停?
[Quote=引用楼主 shaoxin0827 的回复:]
在算法书上给出的一个题目需要由文件input.txt提供输入数据,将计算所得的数输出到文件out.txt.我是不是需要自己编在哪里编写一个文件提供输出,我不知道呢个文件的路径该放在哪里?代码里需要提路径的事对吗?我在百度上查看freopen,看不太懂。。
以下是我自己编的代码,照猫画虎的写了一个文件输入输出,貌似是错的,谁来点播一下我啊。
#define LOCAL
#include <i……
[/Quote]
ryfdizuo 2011-06-04
  • 打赏
  • 举报
回复
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
你使用的是相对目录,文件跟工程文件同级目录。
bdmh 2011-06-04
  • 打赏
  • 举报
回复
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
这里没有指定绝对路径,那么它就在你的程序同目录下,如果要指定其他路径,可以写完整的
jixingzhong 2011-06-04
  • 打赏
  • 举报
回复
不知道路径就使用相对路径吧,就需程序执行时的工作路径(一般就是程序所在的路径)。

这样的话只需要提供文件名就可以。

33,319

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧