OS X用箭头键移动终端插入符号

时间:2016-12-13 13:29:40

标签: c++ c terminal command-line-interface

我做了一个简单的C程序来演示这个问题。在这里。

#include <stdio.h>

int main(int argc, const char * argv[]) {
    char buffer[128];
    memset(buffer, 0, sizeof(buffer));

    printf("Type data:\n");
    scanf("%126s", buffer);

    printf("%s\n", buffer);

    getchar();
    return 0;
}

问题在于,当应用程序正在等待用户输入scanf()并且用户用户想要编辑他键入的行,并且用箭头移动插入符时,插入符号不会移动但是插入了新的丑陋输入。 enter image description here

由于某种原因,它没有以我期望的方式处理密钥。我也无法使用向上键进入上一个打字行。

显然我应该刻意启用此行为。你能建议,我该怎么做?

1 个答案:

答案 0 :(得分:2)

使用readline()。这是一个简单的例子:

#include <stdio.h>
#include <readline/readline.h>
#include <readline/history.h>
#include <ctype.h>

#define MAX_LINE_LEN 80

int main() {
  char *line_buffer;
  int n, i;

  while (1) {
    line_buffer = readline("Say something: ");
    if (!line_buffer) break;
    for (i=0; line_buffer[i]; i++) {
      line_buffer[i] = toupper(line_buffer[i]);
    }
    printf("YOU SAID: %s\n",line_buffer);
  }
  putchar('\n');
  return 0;
}

/* (Compile with cc foo.c -lreadline -o foo) */