使用C中的enter键停止用户输入

使用C中的enter键停止用户输入,c,arrays,string,loops,fgets,C,Arrays,String,Loops,Fgets,我试图编写一个程序,使用fgets接收字符串,但由于某些原因,我无法让它通过用户输入阶段。一旦用户输入“空行”,即回车键(\n),输入应停止,但即使按下此键,循环仍将继续 下面是我代码中有问题的部分: char array[100][256]; for (int i = 0; array[i] != '\n'; i++) { fgets(array[i], 256, stdin); } 100和256分别表示预期的最大行数和字符数 有人知道我哪里出错了吗?这是您的代码,只做了很少的更改

我试图编写一个程序,使用fgets接收字符串,但由于某些原因,我无法让它通过用户输入阶段。一旦用户输入“空行”,即回车键(\n),输入应停止,但即使按下此键,循环仍将继续

下面是我代码中有问题的部分:

char array[100][256];
for (int i = 0; array[i] != '\n'; i++)
{
    fgets(array[i], 256, stdin);
}
100和256分别表示预期的最大行数和字符数


有人知道我哪里出错了吗?

这是您的代码,只做了很少的更改,并在注释中进行了解释。请注意,这不是解决问题的一个很好的方法,例如,长线可能无法按您的意愿运行(它们将在多个
数组
行上拆分)

char数组[100][256];
memset(数组,0,sizeof数组);//初始化内存
int i=0;

虽然(i
array
未初始化,但您立即检查它不是
\n
,因此行为未定义。提示:在启用警告的情况下编译…@FlorentSebag必须读取
array[i-1][0]!='\n'
,这在第一次迭代中显然是有问题的。在循环之前,您需要先做一个fgets,然后更改您的条件,将此设置为:
(int i=0;数组[i][0]!='\n';i++)
@下划线\u d在这种情况下,它可以,因为对未初始化数组的读取访问在进入循环之前发生在
for
条件子句中,而条件在“do…while”循环的第一次迭代后被检查。当然,您必须正确使用它。
if(i==100)
--
i
将超出范围,当您到达那里时,
i
的范围仅限于上面的循环。(将
i
的声明移出循环声明,也许吧?@DavidC.Rankin啊,是的。我将整个循环变成了
,而
,当我在那里时,我认为这样更清楚。