c语言中,怎么表示‘ctrl+z’的输入?

如题所述

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
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-03-23
不存在你描述的现象,第一个ctrl+z就可以结束while循环。
大哥,我看到这个问题后,不敢相信自己的耳朵和眼睛,所以分别在windows
server
+
cgb
/ubuntu
9.10+
gcc中分别做了测试,才让我放心,请问你的测试环境是什么?你的测试过程又是怎样的?
****************************************************
原来是vc++6.0他老人家呀,由于它的许多地方不符合标准,我都快要忘记它了!如果是vc++,那么就要求^z之前只能有一个回车符(也就是说必须出现在当前行的第一个位置),否则会按一般字符读取。
第2个回答  2020-03-27
while
(1)
{
//这里写你的输入语句
if
(
feof(stdin)
)
break;
}
-------------
stdin
--
是键盘流.
如果是文件,填你的文件流名,也就是
fopen
返回的FILE
*fp

fp.
C++
也是判断
EOF
字符按ASCII值统计.
行按'\n'统计.
单词

字母

标点符号空白
切换变化(切入,切出)
统计.
第3个回答  2020-03-26
SHORT
CtrlStatus
=
GetKeyState(VK_CONTROL);
SHORT
ReturnStatus
=
GetKeyState(VK_Z);
if(
(CtrlStatus
&
0x80)==0x80
&&
(ReturnStatus
&
0x80)
==
0x80)
{
.....
}
VC中可以这样来用。应该在windows下都是这样调用函数吧。
行:统计\n个数
单词:空格个数
字符:sizeof
相似回答