C fgets中新行的检测
我试图创建一个C程序,用作UNIX系统的简单命令行解释器。我使用fgets()读取用户输入,然后将输入存储在要解析的缓冲区中。如果唯一的用户输入是按enter键,我想重新发出提示。是否有方法检测返回键是否是在提示下输入的唯一键?下面是我迄今为止尝试过的一段代码:C fgets中新行的检测,c,shell,prompt,fgets,C,Shell,Prompt,Fgets,我试图创建一个C程序,用作UNIX系统的简单命令行解释器。我使用fgets()读取用户输入,然后将输入存储在要解析的缓冲区中。如果唯一的用户输入是按enter键,我想重新发出提示。是否有方法检测返回键是否是在提示下输入的唯一键?下面是我迄今为止尝试过的一段代码: for (;;) { printf("$prompt$ "); fflush(stdout); fgets(commandBuffer, 200, stdin); /* remove trailing
for (;;) {
printf("$prompt$ ");
fflush(stdout);
fgets(commandBuffer, 200, stdin);
/* remove trailing newline:*/
ln = strlen(commandLine) - 1;
if(commandLine[ln] == '\n')
commandLine[ln] = '\0';
/* attempt to handle if user input is ONLY return key:*/
if(commandLine[0] == '\n')
continue;
你需要更换
if(commandLine[0] == '\n')
与
上面的代码用NUL替换换行符。您需要替换
if(commandLine[0] == '\n')
ln = strlen(commandLine);
while (ln > 0 && commandLine[ln-1] == '\n')
--ln;
commandLine[ln] = '\0';
与
上面的代码将换行符替换为NUL
ln = strlen(commandLine);
while (ln > 0 && commandLine[ln-1] == '\n')
--ln;
commandLine[ln] = '\0';
是一种更紧凑的解决方案,用于处理诸如空输入之类的特殊情况
是一种更紧凑的解决方案,用于处理诸如空输入之类的特殊情况。一种用于删除潜在新行的流行单行程序是
if (fgets(commandBuffer, 200, stdin)) {
commandBuffer[strcspn(commandBuffer, "\n")] = '\0';
当strlen(命令行)
返回0时,下面的出现问题。当输入行读取以空字符开始时会发生这种情况
否则表现得像
一个流行的删除潜在新线的一行是
if (fgets(commandBuffer, 200, stdin)) {
commandBuffer[strcspn(commandBuffer, "\n")] = '\0';
当strlen(命令行)
返回0时,下面的出现问题。当输入行读取以空字符开始时会发生这种情况
否则表现得像
对于
fgets()
返回零长度字符串的(罕见)情况,代码将失败得很惨。这可以通过检查sizeof来解决。@JFA请详细说明“检查sizeof”的帮助。@chux我对alk的声明做出了响应,但现在我想起来了,我想你应该改为strlen
。我想用sizeof
来做些别的事情。对于fgets()
返回零长度字符串的(罕见)情况,代码会失败得很惨。这可以通过检查sizeof来解决。@JFA请详细说明“检查sizeof”有什么帮助。@chux我对alk的陈述做出了回应,但现在我想起来了,我想你想要的是strlen。我在想另一件事。