c - 为什么这个函数总是返回0

标签 c

我在这个函数中遇到问题(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));

    }
}

enter image description here

最佳答案

您没有正确检查 pays 字符串:

if(strcmp(ville[i].pays, nom))

如果两个字符串匹配,strcmp 函数将返回 0;如果不匹配,则返回非零。由于条件计算结果为非零时被视为 true,因此仅当 pays 与每个 不匹配时才输入 if 部分ville[i].pays。由于您为每个村庄输入了相同的 pays 字符串以及单独的 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/

相关文章:

c - 为什么我不能在busybox中用 '\t'模拟自动补全

c - 如何从正确存储的函数中获取该值?

访问结构体数组中的下一个元素时,C 程序崩溃

c++ - 混淆使用 sizeof(…) 运算符结果

c - 什么声明应该放在 C 头文件中?

c - A20 SoC 上的数据中止

c - Not null terminated string - 没有可理解原因的 KlocWork 错误

c - C中的结构继承

c - 定义一个二维全局数组,其大小必须从文件中扫描

c - 内存泄漏/GLib 问题