如下代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

#define MAX_LINE 80 /* Max command length */

int main(void)
{
   char fullCmd[MAX_LINE-1];
   const char *EXIT_CMD = "exit"; /* command to exit shell */
   int should_run = 1; /* flag to determine when to exit*/

   while (should_run)
   {
      printf("daw.0>");
      fflush(stdout);
      scanf("%s", fullCmd);

      if (strcmp(fullCmd, EXIT_CMD) == 0)
      {
         should_run = 0;
      }
   }
   return 0;
}


结果提示(daw.0>)重复打印(字数-1次)。例如,我输入“大家好,你好吗?”,将看到以下输出:

daw.0>Hello there everyone, how are you?

daw.0>
daw.0>
daw.0>
daw.0>
daw.0>
daw.0>


我不明白为什么。我需要做更多的工作来为任务创建外壳,但是我什至无法获得最简单的变体来可靠地工作。我在Virtual Box中使用Linux的Debian发行版。

最佳答案

scanf()%s一起停止在第一个空白处扫描。这说明了您观察到的行为。

您可能想使用的是fgets()。请注意,如果缓冲区中有足够的可用空间,fgets()也会读取换行符。如果这是您不想要的,则必须删除尾随的换行符(如果有)。

08-19 10:29