文本结束符EOF与Ctrl+z的那点事
半九十 2015-04-25 07:16:25 背景为如下代码(《c程序设计语言》一书中的一段代码,P29):
for(i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
s[i] = c;
lim位字符数组s[]能容纳的最大元素个数,
DOS窗口下输入:abc
接下来输入文本结束符,
情况1:在字符‘c’后面,直接输入文本结束符,即按Ctrl+z组合键,再按Enter
情况2:在字符‘c’后面先按Enter,接着按Ctrl+z组合键,再按Enter
结果:
情况1下,Ctrl+z当做控制字符处理了,ascii码为26,文本未结束,程序继续等待用户输入;
情况2下,文本流输入结束,Ctrl+z当做文本字结束符处理了,即EOF,值为-1;
说明一下:ascii码1,2,3...26分别对应键盘按键Ctrl+A,Ctrl+B,...,Ctrl+z,这些都是控制字符,如在字符终端输入数据时,按下Ctrl+M组合键,等同于按下回车键。
问题:
1、同一个组合键,两种情况,对应的ascii码不同,怎么解释?
2、可不可以理解为,Ctrl+z单独占用一个文本行时当EOF用,而当在Ctrl+z所在的文本行中,Ctrl+z前面有其他字符时,当做控制字符用?