Эквивалентный Windows getch () для катастрофических отказов Mac/Linux

Вы можете использовать ниже aggregation , используя $indexOfCP

db.users.aggregate([
  { "$lookup": {
    "from": "posts",
    "let": { "authorId": "

Вы можете использовать ниже aggregation , используя $indexOfCP

[110]id", "name": "$name" }, "pipeline": [ { "$match": { "$expr": { "$and": [ { "$ne": [{ "$indexOfCP": ["$text", "$name"] }, -1] }, { "$eq": ["$author", "$authorId"] } ] } }} ], "as": "post" }} ])

11
задан Jonathan Leffler 4 March 2018 в 20:20
поделиться

2 ответа

Вы заглянули <curses.h> видеть что getch() функция делает?

Подсказка: OSX и Linux не являются тем же как Windows.

А именно, как макрос в <curses.h>, мы находим:

#define getch() wgetch(stdscr)

Теперь, там, кажется, в Вашей системе, фактическая функция getch() в библиотеке проклятий, но это ожидает stdscr чтобы быть настроенным, и это сделано функциями инициализации проклятий (initscr() и родственники), и это заметно не сделано Вашим кодом. Так, Ваш код вызывает неопределенное поведение путем вызова стандартных программ проклятий, прежде чем корректная инициализация будет сделана, ведя к катастрофическому отказу.

(Хорошая подсказка от dmckee - это помогло вытащить строку ссылки из acidzombie24, который был важен.)

Для получения до точки, где единственное нажатие клавиши может быть считано и программа, завершенная чисто необходимо сделать большую работу над Unix (OSX, Linux). Необходимо было бы захватить начальное состояние терминала, устроить atexit() функция - или некоторый подобный механизм - для восстановления состояния терминала измените терминал от режима с обработкой в режим без предварительной обработки, затем вызовите функцию для чтения символа (возможно просто read(0, &c, 1)), и сделайте свой выход. Могли бы быть другие способы сделать это - но это, конечно, включит некоторую установку и операции разрушения.

Одна книга, которая могла бы помочь, является Усовершенствованным Программированием Unix, 2-м Edn Mark Rochkind; это покрывает терминальную обработку на необходимом уровне. С другой стороны, можно использовать <curses.h> правильно - который будет более простым, чем решение самокрутки и вероятно более надежным.

12
ответ дан 3 December 2019 в 08:31
поделиться

Вы не показали a

#include <stdio.h>

или

#include <curses.h>

или подобная строка. Вы уверены, что связываетесь против библиотеки, которая включает getch()?

2
ответ дан 3 December 2019 в 08:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: