c - 为什么这个函数总是返回 0
问题描述
我在这个函数中有一个问题(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,如果不匹配,则返回非零。由于如果条件的计算结果为非零,则认为条件为真,因此该if
部分仅在与 each 不pays
匹配时输入。并且因为您为每个村庄输入了相同的字符串以及单独的字符串,所以它们都匹配,因此永远不会输入条件。 ville[i].pays
pays
pays
if
如果您pays
为一个村庄输入了不同的值,那么if
将为该村庄输入不同的值,您将从函数中获得非零返回值。
您需要将结果strcmp
与 0 进行比较以查看字符串是否匹配。
if(strcmp(ville[i].pays, nom) == 0)
另外,永远不要使用gets
,而是使用fgets
.
推荐阅读
- r - 有没有一种方法可以有效地将两个表与存储在列表格式中的键连接起来
- javascript - React + TypeScript:如何修复“返回类型 'Element[]' 不是有效的 JSX 元素。”?
- airflow - 在循环中的任务之后运行气流任务,而不是在循环中的所有任务之后
- r - 使用 tidyr::fill 在非缺失数据上下均匀填充缺失值
- yaml - Yaml 使用键作为块和值
- sql-server - BCP 错误 使用本机方法的数据类型的字段大小无效
- sql - DB2 中的动态数据透视 SQL 查询
- java - 在这种情况下,如何在 main 方法之外使用字符串?
- html - 添加搜索框以选择下拉菜单
- java - 如何在 Java 中使用 List 变量制作对象的深层副本?