c语言中,怎么表示‘ctrl+z’的输入? 5
一楼说的,我有点糊涂 展开
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
}
{
//这里写你的输入语句
if ( feof(stdin) ) break;
}
-------------
stdin -- 是键盘流. 如果是文件,填你的文件流名,也就是 fopen 返回的FILE *fp 名 fp.
C++ 也是判断 EOF
字符按ASCII值统计.
行按'\n'统计.
单词 按 字母 向 标点符号空白 切换变化(切入,切出) 统计.
SHORT ReturnStatus = GetKeyState(VK_Z);
if( (CtrlStatus & 0x80)==0x80 && (ReturnStatus & 0x80) == 0x80)
{
.....
}
VC中可以这样来用。应该在windows下都是这样调用函数吧。
行:统计\n个数
单词:空格个数
字符:sizeof