我根据选择的GTK组合框文本条目(变量= 3< ===>情况3:......等)根据我设置的变量使用C开关。共有4个条目。我的麻烦是让第二和第三个条目真正做点什么。
只有第一个和最后一个条目似乎正确地携带变量值。
我已经反复测试过,看看我是否需要使用if / else而不是开关,但无济于事。但是,在程序中忽略中间的两个条目可能不仅仅是巧合。现在,我正在使用4个if / else语句。但是,使用switch会有相同的行为(只有第一个和最后一个条目会导致程序执行某些操作,在我的情况下,这会导致显示一个对话框,然后在单击时启动显示进度的终端窗口)
请拜托,非常感谢帮助。
感谢。
P.S。我正在使用GTK3。
编辑:我现在在下面发布我的代码的相关部分:
int gaming = 0;
int websurf = 1;
int netwman = 2;
int compmaint = 3;
int selected;
这里(正好在上面),声明常量和要与("选择")进行比较的变量。然后,对于稍后通过gtk_combo_box_text_get_active()获得的字符串,字符串声明如下:
const char *str1[];
const char *str2[];
const char *str3[];
const char *str4[];
这里(下面),在编译时定义了initiateWrite()。到目前为止,所有这些都是在编译时。这是我一直尝试使用if / else或switch的地方,以便我可以根据GTK组合框文本条目的EACH进行操作。只有FIRST和LAST条目实际上有所作为。
void initiateWrite() {
if (selected == gaming) {
system(SCRIPT1);
} else
if (selected == websurf) {
system(SCRIPT2);
} else
if (selected == netwman) {
system(SCRIPT3);
} else
if (selected == compmaint) {
system(SCRIPT4);
}
else return;
}
SCRIPT1到SCRIPT4在编译时定义如下:
#define SCRIPT1 "\
#/bin/bash \n\
xterm -e \"sudo bash gaming /dev/sdc1\"\n\
"
该程序应该检测插入USB端口(拇指驱动器)的介质,是的,我的测试期间一直插入了拇指驱动器(只是出现问题)。
我也一直在使用if / else或稍后在我的代码中切换,这也可能导致问题。这里:
void setSelected(GtkWidget *cbox_text, gpointer data) {
const char *selectionString = gtk_combo_box_text_get_active_text(
cbox_text);
strcpy(str1, "Gaming");
strcpy(str2, "Web Surfing/Remote File Transfer");
strcpy(str3, "Network Management");
strcpy(str4, "Computer Maintenance");
if (strcmp(selectionString, str1) == 0) {
selected = gaming;
} else
if (strcmp(selectionString, str2) == 0) {
selected = websurf;
} else
if (strcmp(selectionString, str3) == 0) {
selected = netwman;
} else
if (strcmp(selectionString, str4) == 0) {
selected = compmaint;
} else return;
}
我不知道是否将selectionString更改为" gchar"将有助于解决问题。像我之前做的那样对(const char *)进行强制转换会导致一些非常奇怪的行为(崩溃)。我也不确定如何实施" gchar"如果这是所需的解决方案。
再次感谢