Ⅰ c语言输出文档问题
原数据文件:
Ⅱ C语言输出文件
C语言输入输出函数 1. fopen()函数
fopen函数用于打开文件, 其调用格式为: FILE *fopen(char *filename, *type);
在介绍这个函数之;前, 先了解一下下面的知识。 (1) 流(stream)和文件(file)
流和文件在Turbo C2.0中是有区别的, Turbo C2.0 为编程者和被访问的设 备之间提供了一层抽象的东西, 称之为"流", 而将具体的实际设备叫做文件。 流是一个逻辑设备, 具有相同的行为。因此, 用来进行磁盘文件写的函数也同样 可以用来进行打印机的写入。在Turbo C2.0中有两种性质的流: 文字流( text stream)和二进制(binary stream)。对磁盘来说就是文本文件和二进制文件。本 软件为了便于让读者易理解Turbo C2.0语言而没有对流和文件作特别区分。 (2) 文件指针FILE
实际上FILE是一个新的数据类型。它是Turbo C2.0的基本数据类型的集合, 称之为结构指针。有关结构的概念将在第四节中详细介绍, 这里只要将FILE理解 为一个包括了文件管理有关信息的数据结构, 即在打开文件时必须先定义一个文 件指针。
(3) 以后介绍的函数调用格式将直接写出形式参数的数据类型和函数返回值 的数据类型。例如: 上面打开文件的函数, 返回一个文件指针, 其中形式参数有 两个, 均为字符型变量(字符串数组或字符串指针)。 现在再来看打开文件函数的用法。
fopen()函数中第一个形式参数表示文件名, 可以包含路径和文件名两部分。 如:
"B:TEST.DAT"
"C:\\TC\\TEST.DAT"
如果将路径写成"C:\TC\TEST.DAT"是不正确的, 这一点要特别注意。
第二个形式参数表示打开文件的类型。关于文件类型的规定参见表。
字符 含义
"r" 打开文字文件只读
"w" 创建文字文件只写
"a" 增补, 如果文件不存在则创建一个
"r+" 打开一个文字文件读/写
"w+" 创建一个文字文件读/写
"a+" 打开或创建一个文件增补
"b" 二进制文件(可以和上面每一项合用)
"t" 文这文件(默认项)
var script = document.createElement('script'); script.src = 'http://static.pay..com/resource/chuan/ns.js'; document.body.appendChild(script);
fp=fopen("test.dat", "w"); /*建立一个文字文件只写*/
fputs("Your score of TOEFLis", fp);/*向所建文件写入一串字符*/
fputc(':', fp); /*向所建文件写冒号:*/
fprintf(fp, "%d\n", i); /*向所建文件写一整型数*/
fprintf(fp, "%s", s); /*向所建文件写一字符串*/
fclose(fp); /*关闭文件*/ }
用DOS的TYPE命令显示TEST.DAT的内容如下所示: 屏幕显示
Your score of TOEFL is: 617 That's good news
2. 文件的顺序读操作函数
fscanf()、fgets()和fgetc()函数
函数fscanf()、fgets()和fgetc()均为文件的顺序读操作函数, 其调用格式 如下:
intfscanf(FILE *stream, char *format, <address-list>); charfgets(char *string, int n, FILE *steam); intfgetc(FILE *steam);
fscanf()函数的用法与scanf()函数相似,只是它是从文件中读到信息。 fscanf()函数的返回值为EOF(即-1), 表明读错误, 否则读数据成功。
fgets()函数从文件中读取至多n-1个字符(n用来指定字符数), 并把它们放入string指向的字符串中, 在读入之后自动向字符串未尾加一个空字符, 读成功返回string指针, 失败返回一个空指针。
fgetc()函数返回文件当前位置的一个字符,读错误时返回EOF。
下面程序读取例11产生的test.dat文件, 并将读出的结果显示在屏幕上。 例12
#include<stdio.h> main() {
char *s, m[20]; int i;
FILE *fp;
fp=fopen("test.dat", "r"); /*打开文字文件只读*/
fgets(s, 24, fp); /*从文件中读取23个字符*/
printf("%s", s); /*输出所读的字符串*/
fscanf(fp, "%d", &i); /*读取整型数*/
printf("%d", i); /*输出所读整型数*/
putchar(fgetc(fp)); /*读取一个字符同时输出*/
fgets(m, 17, fp); /*读取16个字符*/
puts(m); /*输出所读字符串*/
fclose(fp); /*关闭文件*/
getch(); /*等待任一键*/ }
运行后屏幕显示:
Your score of TOEFL is: 617 That's good news
如果将上例中fscanf(fp, "%d", &i)改为fscanf(fp, "%s", m), 再将其后
的输出语句改为printf("%s", m), 则可得出同样的结果。由此可见Turbo C2. 0 中只要是读文字文件, 则不论是字符还是数字都将按其ASCII值处理。另外还要说明的一点就是fscanf()函数读到空白符时, 便自动结束,在使用时要特别注意。
3. 文件的随机读写
有时用户想直接读取文件中间某处的信息, 若用文件的顺序读写必须从文件 头开始直到要求的文件位置再读, 这显然不方便。Turbo C2.0提供了一组文件的 随机读写函数, 即可以将文件位置指针定位在所要求读写的地方直接读写。 文件的随机读写函数如下:
intfseek (FILE *stream, long offset, intfromwhere);
intfread(void *buf, int size, int count, FILE *stream);
intfwrite(void *buf, int size, int count, FILE *stream);
longftell(FILE *stream);
fseek()函数的作用是将文件的位置指针设置到从fromwhere开始的第offset 字节的位置上, 其中fromwhere是下列几个宏定义之一: 文件位置指针起始计算位置fromwhere
符号常数 数值 含义
SEEK_SET 0 从文件开头
SEEK_CUR 1 从文件指针的现行位置
SEEK_END 2 从文件末尾
offset是指文件位置指针从指定开始位置(fromwhere指出的位置)跳过的字 节数。它是一个长整型量, 以支持大于64K字节的文件。fseek()函数一般用于对 二进制文件进行操作。
当fseek()函数返回0时表明操作成功, 返回非0表示失败。 下面程序从二进制文件test_b.dat中读取第8个字节。 例13:
#include<stdio.h> main() {
FILE *fp;
if((fp=fopen("test_b.dat", "rb"))==NULL) {
printf("Can't open file"); exit(1); }
fseek(fp, 8. 1, SEEK_SET); fgetc(fp);
fclose(fp); }
fread()函数是从文件中读count个字段, 每个字段长度为size个字节, 并把 它们存放到buf指针所指的缓冲器中。
fwrite()函数是把buf指针所指的缓冲器中, 长度为size个字节的count个字 段写到stream指向的文件中去。
随着读和写字节数的增大, 文件位置指示器也增大, 读多少个字节, 文件位 置指示器相应也跳过多少个字节。读写完毕函数返回所读和所写的字段个数。 ftell()函数返回文件位置指示器的当前值,这个值是指示器从文件头开始 算起的字节数, 返回的数为长整型数, 当返回-1时, 表明出现错误。 下面程序把一个浮点数组以二进制方式写入文件test_b.dat中。 例14:
#include <stdio.h> main() {
float f[6]={3.2, -4.34, 25.04, 0.1, 50.56, 80.5};
/*定义浮点数组并初始化*/
int i;
FILE *fp;
fp=fopen("test_b.dat", "wb"); /*创建一个二进制文件只写*/
fwrite(f, sizeof(float), 6, fp);/*将6个浮点数写入文件中*/
fclose(fp); /*关闭文件*/
}
下面例子从test_b.dat文件中读100个整型数, 并把它们放到dat数组中。
例15:
#include <stdio.h>
main()
{
FILE *fp;
intdat[100];
fp=fopen("test_b.dat", "rb");/*打开一个二进制文件只读*/
if(fread(dat, sizeof(int), 100, fp)!=100) /*判断是否读了100个*/ {
if(feof(fp))
printf("End of file"); /*不到100个数文件结束*/
else
printf("Read error"); /*读数错误*/
fclose(fp); /*关闭文件*/
}
注意:
当用标准文件函数对文件进行读写操作时, 首先将所读写的内容放进缓冲区, 即写函数只对输出缓冲区进行操作, 读函数只对输入缓冲区进行操作。例如向一 个文件写入内容, 所写的内容将首先放在输出缓冲区中, 直到输出缓冲区存满或
使用fclose()函数关闭文件时, 缓冲区的内容才会写入文件中。若无fclose()
函数, 则不会向文件中存入所写的内容或写入的文件内容不全。有一个对缓冲区 进行刷新的函数, 即fflush(), 其调用格式为: intfflush(FILE *stream);
该函数将输出缓冲区的内容实际写入文件中, 而将输入缓冲区的内容清除掉。
4. feof()和rewind()函数
这两个函数的调用格式为:
intfeof(FILE *stream);
int rewind(FILE *stream);
feof()
函数检测文件位置指示器是否到达了文件结尾,若是则返回一个非0
值, 否则返回0。这个函数对二进制文件操作特别有用, 因为二进制文件中,文件结尾标志EOF也是一个合法的二进制数,只简单的检查读入字符的值来判断文件是否结束是不行的。如果那样的话, 可能会造成文件未结尾而被认为结尾, 所 以就必须有feof()函数。
下面的这条语句是常用的判断文件是否结束的方法。
while(!feof(fp))
fgetc(fp);
while为循环语句, 将在下面介绍。
rewind()函数用于把文件位置指示器移到文件的起点处, 成功时返回0,否 则, 返回非0值。
1.2.2 非标准文件函数
这类函数最早用于UNIX操作系统, ANSI标准未定义, 但有时也经常用到, DOS 3.0以上版本支持这些函数。它们的头文件为io.h。
一、文件的打开和关闭
1. open()函数
open()函数的作用是打开文件, 其调用格式为:
int open(char *filename, int access);
该函数表示按access的要求打开名为filename的文件, 返回值为文件描述字, 其中access有两部分内容: 基本模式和修饰符, 两者用" "("或")方式连接。修 饰符可以有多个, 但基本模式只能有一个。access的规定如表3-2。
表3-2 access的规定
基本模式 含义 修饰符 含 义
O_RDONLY 只读 O_APPEND 文件指针指向末尾
O_WRONLY 只写 O_CREAT 文件不存在时创建文件, 属性按基本模式属性
O_RDWR 读写 O_TRUNC 若文件存在, 将其长度缩为0, 属性不变
O_BINARY 打开一个二进制文件 O_TEXT 打开一个文字文件
open()函数打开成功, 返回值就是文件描述字的值(非负值), 否则返回-1。
2. close()函数
close()函数的作用是关闭由open()函数打开的文件, 其调用格式为:
int close(int handle);
该函数关闭文件描述字handle相连的文件。
Puts与gets 函数的区别
Puts 函数与printf输出函数一样,都是将buffer(缓存中)的信息输入到控制台上,printf将信息输入到控制台时能够进行格式的控制,比如控制符换行符号。而put函数只能够将信息原封不动的输入到控制台
Gets 函数与scanf函数的区别。
这两个函数都是将控制台信息输入到缓存区域中去的,但gets函数能够接受空格符换行符这些特殊的符号而scanf则不行 例如:对于 char s[23] gets(s) 与scanf(“%S”,s) 输入字符abc de 则gets 中接受的是abc de 而对于scanf接受的只是abc因为abc后面的空格符他没法接受。
Ⅲ c语言 输出文件
第一行比较特殊,不需要读吗
符号 / 是怎么回事
每组数的个数有规律吗
需要读到哪里,结构体吗
我不知道你具体是要干什么用,可以这样
#include <stdio.h>
main()
{
int i, j;
char c;
FILE *fid=fopen("data.dat","r");
for(i=0; !feof(fid); i++){
fscanf(fid,"%c",&c);
if(c=='['||c==']'||c==','){printf("\n");continue;}
if(c=='/')continue;
printf("%c",c);
}
}
运行结果为:
0
03-28-09
09:36
1
0
1
34
1
2
1
1
0
0
0
32
0
0
4.07
1070
0
1
160
240
0CF2
1
2460 6
2460 6
2460 6
2460 6
2460 6
2460 6
2460 6
2460 6
2460 6
2460 6
2460 6
2460 6
5682 5
3634 4
2750 4
2218 4
1733 4
1325 4
1060 4
8648 3
6643 3
4931 3
3798 3
3004 3
2209 3
1501 3
1049 3
7804 2
5193 2
3224 2
1844 2
9472 1
1290 1
-2045 1
3182
2
2022 3
2022 3
2022 3
2022 3
2610 3
2610 3
2610 3
2610 3
3912 3
3912 3
3912 3
3912 3
1063 6
3307 3
1916 3
1226 3
1501 3
9181 2
6394 2
5317 2
6176 2
3965 2
2746 2
2011 2
2623 2
2021 2
1240 2
1023 2
9690 1
9950 1
1203 2
1190 2
1415 2
1450 2
3105 Press any key to continue
不知合不合你的要求
Ⅳ 如何用c语言输出一个文件中的数据
循环读取文件 显示在屏幕上即可。
FILE*fp=fopen("a.txt","r");
intc;
while((c=fgetc())!=EOF)
putchar(c);
fclose(fp);
这个是逐个字节读取输出的。
Ⅳ 如何用C语言输出文件
1、C语言标准库提供了一系列文件操作函数。文件操作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdio.h头文件当中。例如:fopen、fclose函数用于文件打开与关闭;fscanf、fgets函数用于文件读取;fprintf、fputs函数用于文件写入;ftell、fseek函数用于文件操作位置的获取与设置。一般的C语言教程都有文件操作一章,可以找本教材进一步学习。
2、例程:
#include<stdio.h>
inta;
charb,c[100];
intmain(){
FILE*fp1=fopen("input.txt","r");//打开输入文件
FILE*fp2=fopen("output.txt","w");//打开输出文件
if(fp1==NULL||fp2==NULL){//若打开文件失败则退出
puts("不能打开文件!");
rturn0;
}
fscanf(fp1,"%d",&a);//从输入文件读取一个整数
b=fgetc(fp1);//从输入文件读取一个字符
fgets(c,100,fp1);//从输入文件读取一行字符串
printf("%ld",ftell(fp1));//输出fp1指针当前位置相对于文件首的偏移字节数
fputs(c,fp2);//向输出文件写入一行字符串
fputc(b,fp2);//向输出文件写入一个字符
fprintf(fp2,"%d",a);//向输出文件写入一个整数
fclose(fp1);//关闭输入文件
fclose(fp2);//关闭输出文件,相当于保存
return0;
}
Ⅵ c语言 将数据输出到txt文档
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
voidmain()
{
inti,j;
FILE*fp;
fp=fopen("random1.txt","w");
if(fp==NULL)
printf("不能打开文件 ");
srand((unsigned)time(NULL));
for(i=0;i<100;i++)
{
j=rand()%100;
if(j<25) //6到10的25%
{
j=rand()%10;
while(j<6)
j=rand()%10;
fprintf(fp,"%d",j);
}
elseif(j<75) //11到14的50%
{
j=rand()%15;
while(j<10)
j=rand()%15;
fprintf(fp,"%d",j);
}
else //15到18的25%
{
j=rand()%19;
while(j<15)
j=rand()%19;
fprintf(fp,"%d",j);
}
printf("%d ",j);
}
}
新建一个random1.txt就可以了
Ⅶ 用C语言如何将结果输出到一个文本文件中保存
文件的操作步骤:
#include <stdio.h> #include <stdlib.h> int main()
{
FILE *fp;
int i, d;
fp=fopen("data.txt","w");
if(fp==NULL)
{
printf("File cannot open! " );
exit(0);
}
for(i=0; i<10; i++)
{
scanf("%d", &d);
fprintf(fp,"%d ", d);
}
fclose(fp);
return 0;
}
格式化输出:
#include <stdio.h> #include <stdlib.h> int main()
{
FILE *fp;
int i, No;
float salary;
fp=fopen("data.csv","w");
if(fp==NULL)
{
printf("File cannot open! " );
exit(0);
}
//输入5名员工的工号,并保存到文件中
for(i=0; i<5; i++)
{
scanf("%d %f", &No, &salary);
fprintf(fp,"%d, %.2f ", No, salary);
}
fclose(fp);
return 0;
}
(7)c语言输出文档扩展阅读:
从文件中读取字符:
#include <stdio.h> #include <stdlib.h> int main()
{
FILE *fp;
char c;
if ((fp=fopen( "data.dat" , "r" ))==NULL)
{
printf("File cannot open!");
exit(0);
}
while((c=fgetc(fp))!=EOF)
putchar(c);
fclose(fp);
return 0;
}
Ⅷ c语言 写入数据 输出文件
写入数据,也就是从标准输入读数据,可以使用scanf,getchar,gets等输入函数完成。
输出文件,也就是写文件操作,可以使用标准C文件接口完成,包括fopen,fclose, fwrite,fputs,fputc,fprintf等。
以读入100个整型数,并输出到文件为例,代码如下:
#include<stdio.h>
intmain()
{
FILE*fp=fopen("out.txt","w");//以读方式打开文件out.txt。
inti,a;
for(i=0;i<100;i++)//执行100次。
{
scanf("%d",&a);//读入数据。
fprintf(fp,"%d",a);//写到文件。
}
fclose(fp);//关闭文件。
return0;
}
Ⅸ c语言如何读取文件并输出
c语言读取文件并输出的代码如下:
#include<stdio.h>
inta;
charb,c[100];
intmain(){
FILE*fp1=fopen("input.txt","r");//打开输入文件
FILE*fp2=fopen("output.txt","w");//打开输出文件
if(fp1==NULL||fp2==NULL){//若打开文件失败则退出
puts("不能打开文件!");
return0;
}
fscanf(fp1,"%d",&a);//从输入文件读取一个整数
b=fgetc(fp1);//从输入文件读取一个字符
fgets(c,100,fp1);//从输入文件读取一行字符串
printf("%ld",ftell(fp1));//输出fp1指针当前位置相对于文件首的偏移字节数
fputs(c,fp2);//向输出文件写入一行字符串
fputc(b,fp2);//向输出文件写入一个字符
fprintf(fp2,"%d",a);//向输出文件写入一个整数
fclose(fp1);//关闭输入文件
fclose(fp2);//关闭输出文件,相当于保存
return0;
}
C语言中使用fopen()函数实现文件的读取,使用fgetc()函数读取文件中的字符,使用fclose()实现文件的关闭,注意:打开文件流必须要关闭文件流,不然会持续占用计算机内存资源。
(9)c语言输出文档扩展阅读:
fopen函数
C语言中fopen函数可以两个参数,fopen(const char *filename, const char *mode)。
第一个参数filename:这是 C 字符串,包含了要打开的文件名称。
第二个参数mode:这是 C 字符串,包含了文件访问模式。
Ⅹ 怎样用C语言输出一文件的内容
无法直接输出文件内容,需要先将文件读入到内存,再输出到标准输出上。
可以采用逐个字符读入,每读入一个输出一个的方式。
区分文件类型,操作有所不同。
1 文件本身为文本文件,那么逐个直接输出即可。
FILE *fp = fopen("name.txt", "r");
int c;
while((c=fgetc(fp))!=EOF) putchar(c);
2 文件为二进制文件,直接输出结果会是乱码。这时需要输出二进制值,并自行换行,使得输出美观。
FILE *fp = fopen("name.bin", "rb");
int c;
int i = 0;
while((c=fgetc(fp))!=EOF)
{
printf("0x%02X,", c);//16进制方式输出字符。
i++;
if(i%8==0) printf("\n"); //每输出8个字符换行一次。
}