【问题标题】:terminate char of text终止文本字符
【发布时间】:2012-02-21 14:15:24
【问题描述】:

我的问题在 OOP 语言中很简单,但在 C 语言中并不那么简单。 当用户在控制台中输入一些文本数据,我们为一个示例 ESC 设置了终止字符(文本数据是多行的,我们不知道何时结束)。

所以我的问题是如何从控制台读取文本,如果用户按 esc 来中断我们读取文本数据的循环?

这是一些代码:

    printf("Enter the source here(press ESC) : \n");
char buffer[1000][1000];
int counter = 0;
while(1)
{
    if (fgets(buffer[counter],sizeof(buffer[counter]),stdin))
    {
        counter++;
    }

}

【问题讨论】:

  • 存储fgets函数的结果,然后使用条件语句检查转义字符。
  • @Cody - 这不起作用,OP希望它在按下 ESC 后立即终止
  • 为什么它“在 OOP 语言中很简单”。 OOP 与它有什么关系?你会以什么神奇的方式在 C++ 中做到这一点,这与你在 C 中的做法完全不同?

标签: c character terminate


【解决方案1】:

最简单的方法是要求用户通过按 C-z 或 C-d 来“结束文件”。或者:

#define ESC 27 /* But not always. */

int ch;
while ((ch = getc(stdin))) {
    if (ch == ESC)
        break;

    /* ... */
}

由于输入通常是熟的,所以更难谢谢你认为:用户可以在按下退出后继续输入内容

为此使用 ncurses 可以作为替代方案。再说了,按 C-d 有什么问题?

【讨论】:

    【解决方案2】:

    我认为阅读多行文本的正确方法是使用 EOF 字符终止输入。在 Windows 中我认为它是 ctrl+Z(我不确定),在类 unix 系统上它是 ctrl+D。 C 中的许多输入函数会自动将其识别为终止符(例如 scanf 和 gets),或者您可以逐个字符地读取并显式地读取输入字符。

    【讨论】:

      【解决方案3】:

      您可以使用getchar() 手动获取单个字符——在检查字符是否为 ESC 的循环中使用它。但是,如果您要编写更大的内容,最好使用像 pdcurses 这样的专用库。

      【讨论】:

        【解决方案4】:

        我认为您实际上并不需要从控制台读取那么多数据。也许尝试考虑将数据放入文件中,然后从文件中读取。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-04-16
          • 2013-10-16
          • 2014-06-09
          • 2014-06-14
          • 1970-01-01
          • 2011-04-01
          相关资源
          最近更新 更多