关于EOF的笔记

今天做的两个作业里面都有EOF,我搞不懂EOF 的作用,导致这两题都没做出来,

所以这里写一篇文章来强化记忆

#include <stdio.h>
 
int main()
{
    char a[10] = { 0 };
    int b = 0;
 
    while ((scanf("%s", &a)) != EOF)
    //当没有返回EOF时,进入循环
    {
        if (a[b] != '\n')
        //当输入的字符不是\n的时候,进入判断
        {
            if (a[b] >= 65 && a[b] <= 90)
            //当输入的字符命中ASCII表中大写字母的区间时,执行下面的语句
            {
                a[b] += 32;
                //把输入的大写字母转换成小写字母(ASCII码表中,大写字母的十进制值比小写字母正好少32)
                printf("%c\n", a[b]);
                //把运算后的数据以字符的形式打印出来
            }
            else if (a[b] >= 97 && a[b] <= 122)
            //当输入的字符命中ASCII码表中小写字母的区间时,执行下面的语句
            {
                a[b] -= 32;
                //把小写转换成大写
                printf("%c\n", a[b]);
            }
        }
    }
    return 0;
}

 

#include <stdio.h>
 
int main()
{
    char a[10] = { 0 };
    int b = 0;
 
    while ((scanf("%s", &a)) != EOF)
    //当没有返回EOF时,进入循环
    {
        if (a[b] != '\n')
        //当输入的字符不是\n的时候,进入判断
        {
            if ((a[b] >= 65 && a[b] <= 90)||(a[b] >= 97 && a[b] <= 122))
            //当输入的字符表中ASCII表中大写字母的区间时,执行下面的语句
            {
               
               
                printf("%c is an alphabet.\n", a[b]);
                //把运算后的数据以字符的形式打印出来
            }
            else 
            {
               
                printf("%c is not an alphabet.\n", a[b]);
            }
        }
    }
    return 0;
}

 通过这两题可以看出自己的基本功一点都不扎实

1.EOF完全不会使用

2.也不熟悉ASCII表

导致这两题是一点思路都没有

一点一点来解决

EOF,为End Of File的缩写,通常在文本的最后存在此字符表示资料结束。
在微软的DOS和Windows中,读取数据时终端不会产生EOF。

此时,应用程序知道数据源是一个终端(或者其它“字符设备”),并将一个已知的保留的字符或序列解释为文件结束的指明;

最普遍地说,它是ASCII码中的替换字符(Control-Z,代码26)。
在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。

在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。

在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~127,不可能出现-1,因此可以用EOF作为文件结束标志。

档案存取或其它 I/O 功能可能传回等于象征符号值 (巨集) EOF 指示档案结束的情形发生。

实际上 EOF 的值通常为 -1,但它依系统有所不同。巨集 EOF会在编译原始码前展开实际值给预处理器。

C语言中,EOF常被作为文件结束的标志。还有很多文件处理函数处错误后的返回值也是EOF,因此常被用来判断调用一个函数是否成功。

#include <stdio.h>
int main(){
	int n;
while(scanf("%d",&n) != EOF){ 
	
}
	return 0;
}

 

当上面的程序运行时,如果不加" != EOF",那么这个程序就是个死循环,会一直运行下去;

加上" != EOF"后该程序就不是死循环了,如果在终端不进行输入该程序会自动结束(while的意思就是说当当前输入缓存还有东西时就一直读取,直到输入缓存中的内容为空时停止)。


在这"scanf("%d",&n) != EOF"相当于"scanf("%d",&n) != EOF",或"~scanf("%d",&n)",或"scanf("%d",&n) == 1 " 。scanf的返回值由后面的参数决定

有小伙伴会问到上面那个程序怎么结束呢?
要注意的是:在终端(黑框)中手动输入时,系统并不知道什么时候到达了所谓的“文件末尾”,因此需要用<Ctrl + z>组合键然后按 Enter 键的方式来告诉系统已经到了EOF,这样系统才会结束while.

scanf("%d%d", &a, &b);
如果a和b都被成功读入,那么scanf的返回值就是2;如果只有a被成功读入,返回值为1;如果a和b都未被成功读入,返回值为0;如果遇到错误或遇到end of file,返回值为EOF,且返回值为int型。
 

熟悉ASCII表

不要求自己会背,但是要求自己在对字母和数字操作的时候想起这个,太好用了 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值