大佬们帮看下,为什么输入ctrl^z输出不了NULL?
c语言吧
全部回复
仅看楼主
level 3
wl5577 楼主
#include <stdio.h>
int main(void)
{
char a[20],*c;
c=fgets(a,10,stdin);
if(c)
putchar(*c);
else
printf("NULL");
putchar('\n');
puts(a);
return 0;
}
按说如果fgets遇到EOF的话,会返回NULL值,为啥打印不出来呢?
2024年08月31日 00点08分 1
吧务
level 14
先截个图,然后说明你认为该输出什么
2024年08月31日 01点08分 2
图在下面
2024年08月31日 04点08分
level 3
wl5577 楼主
fgets函数在遇到EOF时返回NULL值,将其赋予c,然后如果c是NULL,则打印NULL,结果我输入ctrl+Z回车后没反应了,如图。
2024年08月31日 02点08分 3
Ctrl+Z只有在行首才会被视作EOF字符,在行中的Ctrl+Z被视作ASCII=26的控制字符^Z
2024年08月31日 05点08分
@GTA小鸡 那为啥输入字母+ctrl^z回车没反应啊?
2024年08月31日 06点08分
@GTA小鸡 我试了下,直接输入ctrl+z确实能打印NULL,但为啥输入字母+ctrl^z回车没反应啊?
2024年08月31日 06点08分
@wl5577 当命令行中有字符时,^Z+Enter会触发一次flush,将这些字符送入stdin,Enter本身不会被翻译为换行符。由于没有遇到换行符或EOF,fgets会阻塞并继续等待输入。
2024年08月31日 12点08分
1