我正在开发一个控制台程序,该程序允许为简单起见在名为Person的结构的数组中搜索。我现在假设所有属性都是整数。
typedef struct Person {
int name;
int city;
int email;
} Person;
因此比较功能将如下所示:
int comparing(int x, int y) {
return x == y;
}
我的问题是搜索功能,因为用户可能希望基于多个条件进行搜索,例如,他可能想向用户显示具有名称6
和城市的人55
,但我想了一会儿却仍然无法弄清楚如何实现我的菜单,因为它必须像复选框一样工作,用户需要指定他要使用的类型标准,然后指定标准,然后我当然需要根据这些标准进行搜索我的问题很清楚,希望您能提供帮助。可能只用一堆if语句对它进行硬编码,但是我心中不清楚,我希望有更好的方法。
如果要具有“复选框”,用户可以通过使用箭头键在屏幕上移动光标然后ENTER按键来激活它们来进行检查,则无法使用C标准库来执行此操作,但是您可以做到这一点与特定于平台的API。例如,如果您使用的是Linux平台,则可以使用ncurses。但是,最好不要创建适当的图形应用程序,即不要使用控制台应用程序。
如果要仅使用C标准库的功能将其保留为简单的文本控制台应用程序,则可以有一个文本菜单,用户可以在其中指定要切换复选框的文本菜单,然后询问用户哪个复选框他想要切换的号码。每次更改复选框后,程序都会重新打印所有复选框,以向用户显示复选框的新状态。
在注释部分中,您专门要求提供代码以向您显示搜索循环的外观。因此,我为您编写了一个这样的循环。
此循环要求创建一个struct Person
具有名称lf
(代表“寻找”)的类型的变量,并用所有搜索条件填充。只需设置实际要搜索的字段。其余字段可以保持未初始化。此外,类型的三个变量bool
必须在名称创建should_match_name
,should_match_city
和should_match_email
。必须设置这三个变量以指定是否搜索相应的字段,如果设置为true
,则还必须在lf
变量中设置相应的字段。请注意,必须#include <stdbool.h>
启用对bool
变量类型的支持。
循环看起来像这样:
for ( int i = 0; i < number_of_valid_elements_in_array; i++ )
{
if (
( !should_match_name || lf.name == array[i].name ) &&
( !should_match_city || lf.city == array[i].city ) &&
( !should_match_email || lf.email == array[i].email )
)
{
printf(
"Matching person found:\nName: %d\nCity: %d\nE-Mail: %d\n\n",
array[i].name, array[i].city, array[i].email
);
}
}
请注意,更复杂的搜索算法(例如,数据库引擎中使用的算法)不会搜索所有元素以找到匹配项,而是使用索引进行搜索。这样可以大大加快搜索速度。但是,这些索引必须提前创建。但是,只要您的元素少于一百万,就可能没有关系。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句