2012-01-29 1 views
0

Мой вопрос прост в языках ООП, но на языке 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++; 
    } 

} 
+0

Сохраните результат функции 'fgets', а затем используйте условный оператор для проверки escape-символа. –

+0

@ Коды - это не сработает, OP хочет, чтобы он завершился, как только нажат ESC –

+0

Почему это «просто в языках ООП». Что ООП связано с этим? Каким магическим способом вы это сделаете, скажем, на C++, который принципиально отличается от того, как вы это сделаете в C? – jamesdlin

ответ

1

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

2

Самый простой способ будет требовать от пользователя "конец файла" с помощью presing C-Z или C-D. В качестве альтернативы:

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

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

    /* ... */ 
} 

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

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

0

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

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^