ctrl+z输入代表输入文件结束符。
在输入函数从输入流stdin中读取到这个标识时会以
返回值形式通知主调函数。返回值根据函数不同可能为NULL或EOF。
NULL是空指针标识,值为0,在
stdio.h中被定义为(void
*)0。
EOF是End
Of
File的简写,它是一个
宏定义,包含在stdio.h中,值为-1。
一下根据常用的输入函数,分别介绍如何检查ctrl+z的输入。
1
getchar()
该函数作用为返回一个输入流的字符。其返回类型为int。如果不用来检查EOF,那么可以把它的返回值直接赋值给char型或者unsigned
char型。如果要检查EOF,则必须赋值给int型,否则会和输入中的0xff值混淆。
int c;
while(1)
{
c = getchar();
if(c == EOF) break;//检查到EOF退出循环
}2
scanf()
该函数是格式输入函数,属于最常用的输入函数。一般不会去检查它的返回值。
其返回值为成功输入值的变量个数。如果后续参数列表个数(除第一个参数格式
字符串外)与返回值不符,则代表出错。
当返回值为EOF代表检测到ctrl+z输入。
while(scanf(...)!=EOF)//当遇到EOF退出。scanf的参数在这里并不重要。
{
//do something
}
3
gets()
该函数获取一行输入存为字符串,并把结尾的
换行符转换为字符串结束符。
正常输入情况下,会返回输入的字符串指针。
当遇到ctrl
+
z输入时,它与其它输入函数不同,会返回NULL。
所以对于gets的判断可以写作:
char buf[1024];//用gets的时候一定要定义足够大空间,具体依实际应用要求。
while(gets(buf)!=NULL)//当为NULL时退出循环
{
//do something
}