1.文件结尾
计算机需要用某种方式来知道文件的起始和结尾,可以通过以下方法来做这个检测。
- 检测结尾的方法是在文件中放置一个特殊字符来标志结尾,这是在例如CP/M、IBM-DOS和MS-DOS的文本文件中曾使用的一种方法。比如可以内嵌一个CTRL+Z来标志文件结尾^Z。
- 另外一种方法是让操作系统存储文件大小的信息,如果一个文件有100字节的大小,那么如果程序已经从这个文件读取了100字节,那就表示这已经到了文件结尾。Unix对所有文件都使用此方法。
对于这两种方法,C的处理方法是让getchar()函数在到达文件结尾时返回一个特殊值。赋予该值的名称是EOF(End of file)。在stdio.h中定义如下#define EOF(-1)。-1是因为getchar()返回一个范围在0-127之间的值。
#include<stdio.h>
int main()
{
int ch;
while((ch=getchar())!=EOF)
{
//现在结束程序改为CTRL+Z
//有些系统是CTRL+D为文件结尾信号
putchar(ch);
}
return 0;
}
我们可以尝试输出:
1111
1111
2222
2222
ctrl^z //回车后,程序将结束
2.重定向
1.输入重定向
当我们需要将其他文本中的内容输出到控制台可以使用输入重定向
新建在同一目录下创建word.txt,写入this is word.txt
cmd下执行 echo_eof <word.txt ( < 为输入重定向符号 )
2.输出重定向
echo_eof >word.txt(将控制台内容输出到word.txt,但是会覆盖原来的)
>>则是从末尾输入
3.组合重定向
echo < word.txt >a.txt (从控制台输出到word.txt,再输入到a.txt) 注意 word.txt可以不存在,但是a.txt必须存在
4.还有>& <& |
5.规则:
- 重定向符号将一个可执行文件与数据文件连接
- 不能用于数据文件与数据文件的连接
- 输入和输出都不能来自一个以上的文件
c从文件读取数据
#include<stdio.h>
#include<stdlib.h>
int main()
{
int ch;
FILE * fp;
char fname[50];//用于存放文件名
printf("Enter the name of file\n");
scanf("%s",fname);
fp=fopen(fname,"r");//以只读方式打开文件
if(fp==NULL)
{
printf("faile to open file\n");
exit(1);
}
// getc(fp)从打开文件中获取一个字符
while((ch=getc(fp))!= EOF)
{
putchar(ch);
}
fclose(fp);
return 0;
}