3

非常简单的例子 - 希望有一个简单的解决方案:

char x[7];
if(fgets(x,5,stdin))
    printf("y");
else
    printf("n");

当我输入超过字节限制时,我似乎无法让它打印“n” - 有没有什么简单的方法可以强制执行或在超过它时捕获?

作为一个附带问题,哪些示例输入实际上会导致上述代码段中的“n”?我现在真的没有看到重点..

干杯,B

4

3 回答 3

1

fgets失败时将返回 0,因此要获得“n”作为输出,您可以使用 control-D 或 control-Z(或您的操作系统用来指示输入结束的任何内容),而无需先输入任何其他内容。

要检测何时输入的内容多于您留下的阅读空间,请检查您阅读的最后一个字符是否是换行符。如果是,你读了一整行。如果不是,还有更多的等待。

于 2012-04-05T05:55:58.757 回答
0
  1. 您需要检查 stdin via 等中是否仍有数据等待select()

  2. 重定向/dev/null或一个 0 字节的文件到标准输入可以到它。

于 2012-04-05T05:55:36.507 回答
0

fgets 仅在读取任何内容失败时才返回 NULL,这通常意味着文件结束。

由于 fgets 读取一行或该行中适合缓冲区的多个字符,因此您需要检查变量 x 是否包含换行符。

于 2012-04-05T05:57:12.563 回答