非常简单的例子 - 希望得到一个简单的解决方案:
char x[7];
if(fgets(x,5,stdin))
printf("y");
else
printf("n");
当我输入超过字节数限制时,我似乎无法打印“n” - 是否有任何简单的方法可以强制执行或者在超过它时捕获?
作为一个附带问题,在上面的代码片段中,哪些示例输入实际上会导致“n”?我现在还没有真正看到这一点..
干杯, 乙
答案 0 :(得分:1)
fgets
在失败时将返回0,因此要将'n'作为输出,您将使用control-D或control-Z(或您的操作系统用来指示输入结束的任何内容)而不输入其他任何事情。
要检测何时输入的内容超出了您要读取的空间,请检查您读取的最后一个字符是否为换行符。如果是,你读了一整行。如果不是,那就等待了。
答案 1 :(得分:0)
您需要通过select()
等检查是否仍有数据在stdin中等待。
将/dev/null
或0字节文件重定向到stdin就可以了。
答案 2 :(得分:0)
fgets只有在无法读取任何内容时才返回NULL,这通常意味着文件结束。
由于fgets读取一行或该行中适合缓冲区的多个字符,因此需要检查变量x是否包含换行符。