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