【发布时间】:2017-06-25 06:26:11
【问题描述】:
scanf() 总是丢弃空格和换行符。但是当我给出一个字符并按下回车时,新行字符被读取并存储。因此,我无法读取所需的字符数。我的代码有什么问题,还是其他什么问题?
gets 也有同样的问题。许多帖子建议使用fgets(),而不是使用以上两者,但我需要知道为什么会发生这种情况。
【问题讨论】:
-
请复制并粘贴代码而不是快照。
-
n和m声明在哪里?还有char **str = malloc (sizeof *str * n);和str[row] = malloc (sizeof *str[row] * m);(这些是指针,不是您当前问题的原因)。请发帖A Minimal, Complete, and Verifiable example。fflush (stdin)是未定义的行为。 -
"scanf() 总是丢弃空格和换行符"...除非您使用不丢弃空格字符的
%c或%[]格式。您正在使用%c。 -
您正在使用的
%c格式不会丢弃空格(包括换行符,因为它们是空格字符)。fflush(stdin)也有未定义的行为。如果要清除待处理的输入,请找到另一种方法。最后,尝试使用一些 C++ 流而不是 C I/O - 它们有几个优点,包括减少缓冲区溢出的机会(这就是 C 程序员推荐使用fgets()的原因)。 -
你的代码看起来像 C 代码,而不是像 std::iostream 和 std::string 这样的东西,它会让你的生活更轻松。