因此,一个进程初期所拥有的这么三个数 据 流,就分别是 标 准 输出、标准输入和标准错误,分别用stdout, stdin, stderr来表示。对于这三个数据流来说,默认是表现在用户终端上的,一般stdout, stderr被定位到屏幕。 比如我们在c中使用fprintf: fprintf(stdout,"hello world!n"); 屏幕上将打印出"hello world!"来。 stdin被定位到键盘 。当然他们也可以重新定位。
流的重定向
实现函数:FILE *freopen(const char *filename,const char *type, FILE *stream);此函数一般用于将一个指定的文件打开一个预定义的流:标准输入、标准输出或者标准出错。
这个例子实现了从stdout到一个文本文件的重定向。即,把输出到屏幕的文本输出到一个文本文件中。
#include <stdio.h>
int main()
{
int i;
if (freopen("D:OUTPUT.txt", "w", stdout)==NULL)
fprintf(stderr, "error redirecting\stdout\n");
for(i=0;i<10;i++)
printf("%3d",i);
printf("\n");
fclose(stdout);
return 0;
}
在VC++6.0中运行一下,你会发现,十个数输出到了D盘下文本文件OUTPUT.txt中。
fprintf()函数
int fprintf( FILE *stream, const char *format, ... );
fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件. fprintf()只能和printf()一样工作. fprintf()的返回值是输出的字符数,发生错误时返回一个负值.
int fseek(FILE *stream, long offset, int fromwhere);fseek 用于二进制方式打开的文件,移动文件读写指针位置.
fseek(in,-1L,1); -- 文件流in, 零点为当前指针位置,SEEK_CUR 就是 1, -1L -- 文件指针回退1个字节int fseek( FILE *stream, long offset, int origin );
第一个参数stream为文件指针
第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2.
简言之:
fseek(fp,100L,0);把fp指针移动到离文件开头100字节处;
fseek(fp,100L,1);把fp指针移动到离文件当前位置100字节处;
fseek(fp,100L,2);把fp指针退回到离文件结尾100字节处。
参考资料:http://hi.baidu.com/yesreallove/blog/item/0bb05516a3420143f2de3213.html
返回值: 成功,返回0,否则返回其他值。
一个例子:
c语言 分解质因数算法
#include<stdio.h>
#include<math.h>
int main() {
int i,b;
long long in; /*采用64位整型,以便输入更大的数*/
freopen("F://1.txt","r",stdin);
freopen("F://2.txt","w",stdout);
while(scanf("%lld",&in)!=EOF) { /*在F://1.txt中输入x个数N(N>=2)以换行符或空格符隔开,当没有输入时循环会自动结束*/
b=0; /*用于标记是否是第一个质因数,第一个质因数在输出时前面不需要加空格*/
for(i=2;in!=1;i++)
if(in%i==0) {
in/=i;
b?printf(" %d",i):printf("%d",i),b=1;
i--; /*i--和i++使得i的值不变,即能把N含有的所有的当前质因数除尽,例如:24会一直把2除尽再去除3*/
}
printf("\n");
}
return 0;
}