прекратить символ текста - PullRequest
0 голосов
/ 29 января 2012

Мой вопрос прост в языках ООП, но в языке C не все так просто. Когда пользователь вводит некоторые текстовые данные в консоль, и мы устанавливаем для terminate char для примера 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++;
    }

}

Ответы [ 4 ]

2 голосов
/ 29 января 2012

Самый простой способ - потребовать от пользователя «завершить файл», нажав Cz или Cd.В качестве альтернативы:

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

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

    /* ... */
}

Поскольку ввод обычно готовится, это сложнее, спасибо, подумайте: пользователь может продолжать вводить данные после нажатия escape .

Использование ncurses для этой банкибыть альтернативой.Опять же, что не так с нажатием Cd?

1 голос
/ 29 января 2012

Я думаю, что правильный способ прочитать несколько строк текста - завершить ввод символом EOF. В Windows я думаю, что это Ctrl + Z (я не уверен), в Unix-подобных системах это Ctrl + D. Многие функции ввода в C автоматически распознают его как терминатор (например, scanf и gets), или вы можете прочитать символ за символом и явно ввести символ ввода.

0 голосов
/ 29 января 2012

Я думаю, что вам не нужно читать столько данных из консоли. Может быть, попробуйте добавить данные в файл и прочитать их из файла.

0 голосов
/ 29 января 2012

Вы можете вручную получить один символ, используя getchar() - используйте его в цикле, который проверяет, является ли символ ESC.Однако, если вы пишете что-то большее, лучше использовать выделенную библиотеку, например pdcurses .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...