关于文本文件的格式问题,用fgetc()函数读文件的每个字符,文件中的空格和换行怎么表示

AvalonZST 2010-06-01 01:43:06

#include<iostream>
#include<stdio.h>
using namespace std;
void main(){
FILE *fp;
FILE *p;
p=fopen("write.txt","w");
fp=fopen("test.txt","r");
char c=fgetc(fp);
while(c!=EOF)
{
cout<<c<<'*';
putc(c,p);
c=fgetc(fp);
}
fclose(fp);
}
此代码运行后结果如图,请高手指教:
...全文
191 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhuzhuxiazst 的回复:]
请问为什么回输出“?”了?
是编译器规定的么?
[/Quote]
摒弃cout
使用printf
AvalonZST 2010-06-01
  • 打赏
  • 举报
回复
请问为什么回输出“?”了?
是编译器规定的么?
赵4老师 2010-06-01
  • 打赏
  • 举报
回复
' ',0x20
'\n',0x0a
'\r',0x0d
tjyjx7946358 2010-06-01
  • 打赏
  • 举报
回复
看不到图。。。
macrojj 2010-06-01
  • 打赏
  • 举报
回复
图呢 图呢。。。。
AvalonZST 2010-06-01
  • 打赏
  • 举报
回复
请各位大侠们自己运行一下,然后给咱稍微解释下结果里面的??是什么!!!
第十三章 文件 对数据的管理无论是用数组还是链表,都是存储在内存的,程序结束后都会丢失,下一次运行程序时,要重新输入或运算生成数据。要把程序运行的数据保存起来以便下次运行继续使用,在计算机持久保存数据的方式是利用文件保存。 13.1 文件概述 文件一般是指存储在外部介质上数据的集合。文件以数据形式存放在外部介质上,操作系统以文件为单位对数据进行管理。想找到存在外部介质上的数据,必须按文件名找到指定的文件然后再从该文件取数据。要想在外部介质上存储数据必须先建立一个文件(以文件名标识),才能向它输出数据。从操作系统角度,每一个与主机相连的输入输出设备都可以被看作一个文件。在程序运行时,常常需要将一些数据(运行的最终结果或间数据)输出到磁盘上保存,以后要用时再从磁盘输入到计算机的内存,这就要用到磁盘文件。 操作系统的文件标识包括三部分: (1)文件路径:表示文件在外部存储设备的位置。 (2)文件名:遵循标识符的命名规则。 (3)文件扩展名:表示文件的性质(.txt .dat .c)。 如:d:\c++\temp\flie1.dat 文件操作是一种典型的IO操作(输入输出操作)。输入输出是针对内存而言的,进内存为输入,出内存为输出。 标准输入输出就是标准输入设备(键盘)和标准输出设备(显示器),键盘和显示器就是一种文件。C语言将文件看成字符(字节)的序列,即由一个一个字符(字节)的数据顺序组成。C语言文件的存取是以字符(字节)为单位的,输入输出数据流的开始和结束仅受程序控制不受物理符号控制(如回车换行符)。输出时不会自动增加回车换行符作为记录结束的标志,输入时不以回车换行符作为记录的间隔(实际上C文件不是由记录构成的),这种文件称为流式文件。 ANSI新标准文件采用缓冲方式,系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。从内存向磁盘输出数据必先送到输出缓冲区,装满缓冲区后才一起送到磁盘。从磁盘向内存输入数据先送到输入缓冲区,程序需要数据时去缓冲区取,若缓冲区无数据,则程序进入阻塞状态(等待数据)。 C语言把数据看作是一连串的字符(字节),根据数据的组成形式,分为ASCII文件和二进制文件文本文件又称ASCII文件每个字节存放一个ASCII码,代表一个字符。如1、2的ASCII码分别为49、50,所以整数12用ASCII文件存放时,存放形式为00110001 00110010 二进制文件是直接用数据的二进制形式存放的,即把内存的数据按其在内存的存储形式原样输出到磁盘上存放。 程序实现对文件的处理通常分三步: (1)打开文件:将程序与文件建立联系。 (2)操作文件:对文件进行写操作,即输入输出。 (3)关闭文件:操作完成应当切断文件与程序的联系。 C语言没有输入输出语句,对文件写都是用库函数实现的。ANSI规定了标准输入输出函数,用它们对文件进行写,这些函数的声明包含在头文件stdio.h。 13.2 文件的打开与关闭 文件进行写操作前先要打开,使用完毕要关闭。打开文件,是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其他操作。关闭文件则断开指针与文件之间的联系。 1.打开文件(fopen函数) 原型:FILE *fopen(char *filename, char *mode); FILE是在stdio.h头文件定义的一个结构体,用来保存文件信息。 fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式); 其: ·“文件指针名”必须是被说明为FILE类型的指针变量。 ·“文件名”是被打开文件文件名,是字符串常量或字符串数组。 ·“使用文件方式”是指文件的类型和操作要求。 如: FILE *fp; fp=fopen("file1.txt","r"); 其意义是在当前目录下打开文件file1.txt,只允许操作,并使fp指向该文件。 又如: FILE *fp; fp=fopen("c:\\file2.txt","rb"); 意义是打开C驱动器磁盘根目录下的文件file2.txt,对其按二进制方式进行操作。两个反斜线\\的第一个表示转义字符,第二个表示根目录。 文件打开方式 r 只打开一个文本文件,只允许数据 w 只写打开或建立一个文本文件,只允许写数据 a 追加打开一个文本文件,并在文件末尾写数据 r+ 写打开一个文本文件,允许和写 w+ 写打开或建立一个文本文件,允许和写 a+ 写打开一个文本文件,允许和在文件末尾写数据 rb 只打开一个二进制文件,只允许数据 wb 只写打开或建立一个二进制文件,只允许写数据 ab 追加打开一个二进制文件,并在文件末尾写数据 rb+ 写打开一个二进制文件,允许和写 wb+ 写打开或建立一个二进制文件,允许和写 ab+ 写打开一个二进制文件,允许和在文件末尾写数据 (1)文件使用方式由r、w、a、b、+拼成,含义分别为: r(read) w(write) 写 a(append) 追加 b(binary)二进制文件 + 和写 (2)用r方式打开文件文件必须存在,只能从该文件出。 (3)用w方式打开只能向文件写入。若打开的文件不存在,则以指定的文件名建立新文件。若存在,则将存在的文件删除,重建新文件。 (4)向一个已存在的文件追加新的信息,只能用a方式打开。文件必须存在,否则会出错。 (5)打开文件出错时fopen将返回一个空指针值NULL。程序可用这一信息判断是否完成打开文件的工作,并做相应的处理。因此常用以下程序段打开文件: if((fp=fopen("c:\\file2.txt","rb"))==NULL) { printf("\nerror on open c:\\file2.txt!"); exit(0); } (6)把文本文件入内存时,要将ASCII码转换成二进制码。把内存数据以文本方式写入磁盘时,要将二进制码转换成ASCII码。因此文本文件写花费较多的转换时间,对二进制文件写不存在这些转换。 (7)标准输入文件(键盘)、标准输出文件(显示器)、标准出错输出(出错信息)是由系统打开的,可直接使用。 2.关闭文件(fclose函数文件使用完毕,应用关闭文件函数文件关闭,从而把缓冲区的数据写入文件。否则程序结束时可能造成数据丢失。 fclose函数使用形式: fclose(文件指针); 如:fclose(fp); 正常完成关闭文件操作时,fclose函数返回值0。发生错误时返回EOF。 13.3 文件写 对文件和写是最常用的文件操作,在C语言标准库提供了多种文件写的函数字符函数:fgetc和fputc 字符函数:fgets和fputs 数据块函数:fread和fwrite 格式函数:fscanf和fprintf 13.3.1 字符函数 1.字符函数fgetc 规格:int fgetc(FILE * stream); 功能:从指定的文件一个字符。 参数:stream为指向文件的指针。 返回值:从stream所指的文件取一个字符,转换为int类型返回。若已到文件尾返回EOF,文件状态改为结束状态。若错误返回EOF,文件改为错误状态。EOF在stdio.h定义为-1。 例如: ch=fgetc(fp); 其含义是从打开的文件fp取一个字符并送入ch。 对于fgetc函数的使用有几点说明: (1)在fgetc函数调用取的文件必须是以写方式打开的。 (2)文件内部有一个位置指针,用来指向文件的当前写字节,文件打开时,位置指针总指向文件的第一个字节。使用fgetc函数后位置指针向后移动一个字节。因此可连续多次使用fgetc函数取多个字符文件指针是指向整个文件的,要在程序定义说明,只要不重新赋值文件指针值不变。文件内部的位置指针用于指示文件内部的当前写位置,每写一次,位置指针向后移动,它无需在程序定义说明,由系统自动设置。 例:文本文件file.txt,把其所有非空格字符输出在标准输出设备上。 #include #include #include int main() { FILE *fp; char ch; if((fp=fopen("file.txt","r"))==NULL) { printf("\nCan't open file,strike any key exit!"); getch(); /*等待敲键盘,显示Can't open file,strike any key exit!*/ exit(1); /*结束程序*/ } ch=fgetc(fp); while(ch!=EOF) /*文件结束时取得到EOF*/ { if(ch!=' ') putchar(ch); ch=fgetc(fp); } fclose(fp); return 0; }

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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