【问题标题】:Searching array of structures for match and output搜索结构数组以查找匹配和输出
【发布时间】:2019-09-16 21:14:28
【问题描述】:

我有一个结构数组。我需要用户输入一个名称,然后搜索匹配的结构,然后输出该信息。我正在使用 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 语句似乎没有做任何事情。打印整个列表,而不仅仅是匹配项。

【问题讨论】:

    标签: c arrays string structure strcmp


    【解决方案1】:

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

    你可能想写

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

    有人写

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

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

    【讨论】:

      【解决方案2】:

      似乎你在 for 循环中有你的 print 函数,因此你的 print 函数将被多次调用(在你的情况下为 10 次).. 当涉及到匹配检查时 strcmp(your strings) 是否等于 0 ..如果他们是那么它是一个匹配,如果不是那么它不是一个匹配。所以检查 strcmp 是否等于 0 并将 print 函数从 for 循环中取出。

      【讨论】:

        【解决方案3】:

        strcmp 返回整数。在这里查看描述

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

        在您的代码 if 语句中,您应该检查该值是否等于 0,而不是直接保持 strcmp

        希望它会起作用。

        【讨论】:

          猜你喜欢
          • 2020-04-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-18
          相关资源
          最近更新 更多