【发布时间】:2020-04-26 00:32:09
【问题描述】:
我正在尝试编写一个使用 fgets 接收字符串的程序,但由于某种原因,我无法让它通过用户输入阶段。一旦用户输入“空白行”,输入应该停止,即。 Enter 键 (\n),但即使按下此键,循环也会继续。
这是我的代码有问题的部分:
char array[100][256];
for (int i = 0; array[i] != '\n'; i++)
{
fgets(array[i], 256, stdin);
}
100 和 256 分别代表预期的最大行数和字符数。
有人知道我哪里出错了吗?
【问题讨论】:
-
array未初始化,但您立即检查它不是\n,因此未定义行为。 -
提示:编译时启用警告...
-
@FlorentSebag 那不得不读
array[i-1][0] != '\n',这在第一次迭代中显然是有问题的 -
您需要在循环之前执行第一个 fgets,然后更改您的条件以放置:
for (int i = 0; array[i][0] != '\n'; i++) -
@underscore_d 在这种情况下,它可以,因为对未初始化数组的读取访问发生在进入循环之前的
for条件子句中,而条件被检查 after i> “do...while”循环中的第一次迭代。当然,你必须正确使用它。
标签: c arrays string loops fgets