搜索结构数组以进行匹配和输出

时间:2019-04-27 17:30:51

标签: c arrays string structure strcmp

我有一系列结构。我需要用户输入名称,然后搜索匹配项的结构,然后输出该信息。我正在使用strcmp比较匹配的字符串。因此,无论用户输入什么,整个列表都会打印出来。

我正在使用for循环在数组中循环查找匹配的名称。然后,我使用带strcmp的if语句比较匹配的字符串。而不是只打印匹配的字符串,而是打印整个列表。

 printf("Enter city name:\n");
 scanf("%s", city);

 //change city to lower case before comparison
 for(i=0; i<strlen(city); i++)
   city[i] = low(city[i]);

 //fp = fopen(outfile, "w");
 printf("The population density is:\n");
 for(i=0;i<10;i++){
   if ( strcmp(city, veg[i].name)) {
     density = veg[i].population / veg[i].area;
     printf("%s  %.2f\n", veg[i].name, density );
   }
 }

用户应输入结构中拥有的城市的名称。循环应遍历结构,直到找到匹配项并输出人口密度的城市名称。但是,if语句似乎没有做任何事情。整个列表会打印出来,而不仅仅是匹配。

3 个答案:

答案 0 :(得分:1)

strcmp如果字符串相等则返回0,否则返回非零。 (助记符:将strcmp视为减去字符串并返回相减的结果)。因此,仅当if 等于veg[i].name时,您的city块才会执行。

您可能想写

if (strcmp(city, veg[i].name) == 0) { ... 

有人写

if (!strcmp(city, veg[i].name)) { ...

但是我个人觉得不太清楚。

答案 1 :(得分:0)

似乎您的打印函数在for循环中,因此您的打印函数将被多次调用(在您的情况下为10)..当进行匹配检查时,strcmp(您的字符串)是否等于0 ..如果他们是匹配的,如果不是,那么它不是匹配的。因此请检查strcmp是否等于零,然后将打印功能移出for循环。

答案 2 :(得分:0)

strcmp返回整数。在此处查看说明

https://www.programiz.com/c-programming/library-function/string.h/strcmp

在代码if语句中,应检查值是否等于0,而不要直接保留strcmp

希望它会起作用。