有趣的C语言--文件结尾和重定向

1.文件结尾

计算机需要用某种方式来知道文件的起始和结尾,可以通过以下方法来做这个检测。

  1. 检测结尾的方法是在文件中放置一个特殊字符来标志结尾,这是在例如CP/M、IBM-DOS和MS-DOS的文本文件中曾使用的一种方法。比如可以内嵌一个CTRL+Z来标志文件结尾^Z。
  2. 另外一种方法是让操作系统存储文件大小的信息,如果一个文件有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.规则:

  1. 重定向符号将一个可执行文件与数据文件连接
  2. 不能用于数据文件与数据文件的连接
  3. 输入和输出都不能来自一个以上的文件

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;
}

源码位置:https://github.com/oDevilo/C

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值