使用C中的enter键停止用户输入
我试图编写一个程序,使用fgets接收字符串,但由于某些原因,我无法让它通过用户输入阶段。一旦用户输入“空行”,即回车键(\n),输入应停止,但即使按下此键,循环仍将继续 下面是我代码中有问题的部分:使用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分别表示预期的最大行数和字符数 有人知道我哪里出错了吗?这是您的代码,只做了很少的更改
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;
虽然(iarray
未初始化,但您立即检查它不是\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啊,是的。我将整个循环变成了,而,当我在那里时,我认为这样更清楚。