Почему эта функция всегда возвращает 0 - PullRequest
0 голосов
/ 03 марта 2019

У меня проблема с этой функцией (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));

    }
}

введите описание изображения здесь

1 Ответ

0 голосов
/ 03 марта 2019

Вы неправильно проверяете строку pays:

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

Функция strcmp возвращает 0, если две строки совпадают, и ненулевое, если они не совпадают.Поскольку условие считается истинным, если оно оценивается как ненулевое, часть if вводится только тогда, когда pays соответствует , а не соответствует каждому ville[i].pays.И поскольку вы ввели одинаковую строку pays для каждой деревни, а также отдельную строку pays, все они совпадают, поэтому условие if никогда не вводится.

Если вы ввели другой pays для одной деревни, тогда для нее будет введен if, и вы получите ненулевое возвращаемое значение из функции.

Вам нужносравнить результат strcmp с 0, чтобы увидеть, совпадают ли строки.

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

Кроме того, никогда не использует gets, а вместо этого использует fgets.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...