我在这个函数中遇到问题(int PopulationTotal(villes ville[], int n, char nom[])
),我创建了一个城市结构,有一个名称和数量人口和他的国家的名称,我希望用户给我一个国家的名称,我会给他这个国家的人口总数。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct ville
{
char nom[50];
int population;
char pays[30];
}villes;
void chargement(villes villes[], int n)
{
int i;
for(i=0; i<n; i++)
{
printf("Entrez le nom de la ville n° %d: \n", i+1);
gets(villes[i].nom);
printf("Entrez la population de la ville n° %d:\n", i+1);
scanf("%d", &villes[i].population);
getchar();
printf("Entrez le pays de la ville n° %d:\n", i+1);
gets(villes[i].pays);
}
}
int populationTotal(villes ville[], int n, char nom[])
{
int Total=0, i;
for(i=0; i<n; i++)
{
if(strcmp(ville[i].pays, nom))
Total += ville[i].population;
}
return Total;
}
int main()
{
villes ville[50];
int n;
char pays[30];
printf("Entrez le nombre de villes: \n");
scanf("%d", &n);
getchar();
if( n < 1 || n > 50)
printf("Le nombre doit etre...");
else
{
chargement(ville, n);
printf("Entrez le pays: \n");
gets(pays);
printf("La population total est: %d", populationTotal(ville, n, pays));
}
}
最佳答案
您没有正确检查 pays
字符串:
if(strcmp(ville[i].pays, nom))
如果两个字符串匹配,strcmp
函数将返回 0;如果不匹配,则返回非零。由于条件计算结果为非零时被视为 true,因此仅当 pays
与每个 不匹配时才输入
。由于您为每个村庄输入了相同的 if
部分ville[i].payspays
字符串以及单独的 pays
字符串,因此它们全部匹配,因此永远不会输入 if
条件。
如果您为一个村庄输入了不同的pays
,则将为该村庄输入if
,并且您将从函数中获得一个非零返回值。
您需要将strcmp
的结果与0进行比较,看看字符串是否匹配。
if(strcmp(ville[i].pays, nom) == 0)
此外,never use gets
而是使用fgets
。
关于c - 为什么这个函数总是返回0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54970163/