细枝末节之 文件结束符与 “26”

文件结束符

  • 有些时候,我们需要输入许多数据,总要有一个符号来表示输入结束,这个符号就是文件结束符
  • 文件结束符是一个标志,它并不是一个字符,在C语言的stdio库中给出了它的定义:define EOF (-1) 所以文件结束符其实是一个int类型的数-1
  • Windows环境下文件结束符是Ctrl+z,Linux环境下文件结束符是Ctrl+d
  • 文件结束符只有在第一位的时候才会被编译成EOF,也就是说,如果在输入多组数据之后不换行,紧接着输入Ctrl+z(Windows),那么输入不会停止,系统会继续等待输入

知道了EOF实际表示的是-1之后,我们尝试输出它。

#include <bits/stdc++.h>
using namespace std;
int main(){ 
    printf("%d\n",EOF);
    return 0;
}
//Output: -1
  • 正确的输出了-1,这符合我们的预计。
  • 在上面我提到过,如果把Ctrl+z紧接着几组数据之后输入而不换行不会起到文件结束的作用,下面让我们来测试一下
#include <bits/stdc++.h>
using namespace std;
int main(){ 
    char c;
    while(cin>>c){//简单的输入几个字符看看
        printf("%d\n",c);
    }
    return 0;
}
//Input:1 			Output: 49
		2 					50
		3 					51
		4 					52
		5 					53
		ctrl+z
//可以看出在读取ctrl+z之后,程序确实停止了,也就是说,系统读取到的是
//文件结束符EOF
//更换一组测试数据
//Input:a b c ctrl+z

//Output:97
//       98
//		 99
//  	 26
//文件的读取并未结束~~~~
  • 等等,看起来哪里有些不对劲,这个26是什么东西?刚才说过,EOF在宏定义里面被定义成为了-1,如果在数据之后不换行输入ctrl+z那么它不被编译成为文件结束符,也就是说我们输出了ctrl+z的ASCII码值!
  • 难道说ctrl+z有着自己的ASCII码吗?没错,是这样的。从ctrl+a一直到ctrl+z的ASCII码为1-26,他们属于不能够被打印的控制字符,所以有的时候我们在输出某个int型数所对的字符时,会出现,这其实就是不能够被打印的字符的错误解码导致的,最后附上一份完整的ASCII码表
    在这里插入图片描述
    在这里插入图片描述

您的批评就是我最好的进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Clarence Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值