我正在尝试创建一个C程序,用作UNIX系统的简单命令行解释器。我使用fgets()来读取用户输入,然后将输入存储在要解析的缓冲区中。如果唯一的用户输入是按Enter键,我想重新发出提示。有没有办法检测返回键是否是在提示符下输入的唯一键?下面是我到目前为止尝试过的一段代码:
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;
答案 0 :(得分:2)
您需要替换
if(commandLine[0] == '\n')
与
if(commandLine[0] == '\0')
上面的代码用nuls替换了换行符。
答案 1 :(得分:1)
ln = strlen(commandLine);
while (ln > 0 && commandLine[ln-1] == '\n')
--ln;
commandLine[ln] = '\0';
是一种更紧凑的解决方案,可处理空输入等特殊情况。
答案 2 :(得分:0)
ln
应该是size_t
类型,绝对不应该ln = strlen(commandLine) - 1;
。存在许多奇怪的情况,其中ln
将0
而commandLine[ln-1]
将在commandLine
之外访问。执行\n
有点像@ensc。
按照@simonc的建议进行测试。
/* remove potential trailing newline */
size_t ln = strlen(commandLine);
if (ln > 0 && commandLine[ln-1] == `\n`) {
commandLine[--ln] == '\0';
}
/* attempt to handle if user input is ONLY return key:*/
if(commandLine[0] == '\0')
continue;