文件结束符
- 有些时候,我们需要输入许多数据,总要有一个符号来表示输入结束,这个符号就是文件结束符
- 文件结束符是一个标志,它并不是一个字符,在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码表