在对话框(libdialog)中获取 dialog_menu 的选择索引

Get selection index of dialog_menu in dialog (libdialog)

我正在使用 dialog in C and have been reading the documentation here 实现一个小型对话系统,但不知道如何获取 dialog_menu 命令的选择索引。

我知道 init_dialog(FILE *, FILE *) 函数在这里将 stdout 作为输出,但我不认为无论如何都可以将输出重定向到变量。

当运行此代码时,按下"Exit"按钮returns代码1,同时按下两个选项中的任何一个returns0。我如何区分这些选择?

#include <dialog.h>
#include <stdio.h>
#include <stdlib.h>

#define LEN(arr) ((int) (sizeof(arr) / sizeof(arr)[0]))

int
menu()
{
    int select;
    char *modes[] =
    {
        "1", "The first option",
        "2", "The second option"
    };

    init_dialog(stdin, stdout);
    select = dialog_menu("test_app", "Choose an option.", 0, 0, 0, LEN(modes) / 2, modes);
    end_dialog();

    return select;
}

int
main()
{
    int status;
    status = menu();
    printf("%d\n", status);
    return status;
}

dialog 库包含一个名为 dialog_vars 的结构,其中包含一个变量 char *input_result

在菜单中进行选择时,input_result 设置为 标签的值 ,(在提供的源代码中,该标签是 "1""2",如果根本没有选择,NULL 指针。

从这里,可以执行 strcmp 以确定选择了哪个响应。

PS: 始终确保在重复对话之前调用 dlg_clr_result() 因为选择是 连接 input_result 因此不调用该函数,新结果将附加到旧结果上而不是替换它。

示例:

#include <dialog.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LEN(arr) ((int) (sizeof(arr) / sizeof(arr)[0]))

void
menu()
{
    char *modes[] =
    {
        "1", "The first option",
        "2", "The second option"
    };

    init_dialog(stdin, stdout);
    dialog_menu("test_app", "Choose an option.", 0, 0, 0, LEN(modes) / 2, modes);
    end_dialog();

    char *result = dialog_vars.input_result; /* this will be "1", "2" or NULL */

    init_dialog(stdin, stdout);
    dialog_menu("test_app", strcmp(result, "1") ? "One" : "Two", 0, 0, 1);
    end_dialog();
}

int
main()
{
    menu();
    return 0;
}