在C中写入数组并显示数组中的独立实体

在C中写入数组并显示数组中的独立实体,c,arrays,C,Arrays,我正在写一个代码,基本上有10条街道,在每一条街道上,用户被要求提供每家房子的数量和孩子的数量。但当我试图显示街道的数量时,房子的数量起作用,但房子里孩子的数量却不起作用。我还想知道如何将街上的孩子数量相加,就像一条街道1总共有10个孩子(我真的不知道如何做这部分)。我认为问题在我的for循环中,但我不完全确定问题是什么。代码如下所示: int main() { int i=0; int j=0; int streets[10]; int houses=0; int KidsInStreets

我正在写一个代码,基本上有10条街道,在每一条街道上,用户被要求提供每家房子的数量和孩子的数量。但当我试图显示街道的数量时,房子的数量起作用,但房子里孩子的数量却不起作用。我还想知道如何将街上的孩子数量相加,就像一条街道1总共有10个孩子(我真的不知道如何做这部分)。我认为问题在我的for循环中,但我不完全确定问题是什么。代码如下所示:

int main()
{

int i=0;
int j=0;
int streets[10];
int houses=0;
int KidsInStreets[houses];
for (i=0;i<10;i++)
{
    printf("How many houses are there in street %d:\n", i+1);
    scanf("%d",&houses);
    for (j=0;j<houses;j++)
    {
        printf("How many kids are there in house number %d, in street number %d:\n", j+1, i+1);
        scanf("%d", &KidsInStreets[j]);
    }
}
for (i=0;i<10;i++)
{
    for (j=0;j<houses;j++)
    {
        printf("Street:%d House:%d Kids:%d\n", i+1, j+1, KidsInStreets[j]);//Kids in street output and houses output have bugs, such as all the houses in the street need to be displayed, and the kids thing is just not working
    }
}
return 0;
intmain()
{
int i=0;
int j=0;
int街[10];
int=0;
街道[房屋]内;

对于(i=0;i一个问题是,当你对KidsinsStreets[房屋]进行
int时,
房屋
为零;
。但真正的问题是,你只有一个数组,但你需要为每个街道设置一个数组

尝试以下方法:

int* streets[10];   // Notice *
int houses=0;
for (i=0;i<10;i++)
{
    printf("How many houses are there in street %d:\n", i+1);
    scanf("%d",&houses);
    streets[i] = malloc(houses * sizeof(int)); // Allocate array
    for (j=0;j<houses;j++)
    {
        printf("How many kids are there in house number %d, in street number %d:\n", j+1, i+1);
        scanf("%d", &streets[i][j]);
    }
}
void streets()
{
int i=0;
int j=0;
国际*街道[10];
int houses_in_street[10];
int=0;

对于(i=0;这条线
int KidsInStreets[houses]。
就是问题所在。
houses
为零,所以创建一个大小为0的数组。哦,好的,所以KidsInStreets[houses]的数组应该在第一个for循环之后进行吗?你可以将其声明为一个已知最大大小的数组,或者像你建议的那样,在知道房屋数量后进行声明。Google用于动态内存分配。与欢迎使用堆栈溢出非常相似。请注意,这里说“谢谢”的首选方式是up voting好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请查看页面,还有,好的,代码工作得很好,我需要做些什么才能做到:“街道%d中的孩子总数为:…”?我将如何修改代码?这是我添加的代码,用于修改数组中的元素和,但它会进行累积和:for(i=0;i@Jiren-您评论中的代码似乎很好-请记住将
sum
初始化为零,而不是进行累加求和,如何将其更改为对每条街道进行求和?
int* streets[10];   // Notice *
int houses_in_street[10];
int houses=0;
for (i=0;i<10;i++)
{
    printf("How many houses are there in street %d:\n", i+1);
    scanf("%d",&houses);
    streets[i] = malloc(houses * sizeof(int)); // Allocate array
    houses_in_street[i] = houses;
    for (j=0;j<houses;j++)
    {
        printf("How many kids are there in house number %d, in street number %d:\n", j+1, i+1);
        scanf("%d", &streets[i][j]);
    }
}


for (i=0;i<10;i++)
{
    for (j=0;j<houses_in_street[i];j++)
    {
        printf("Street:%d House:%d Kids:%d\n", i+1, j+1, streets[i][j]);
    }
}
struct street {
    int number;
    int houses;
    int* kids_in_house;
};

// use it like
struct street streets[10];
void streets()
{
int i=0;
int j=0;
int* streets[10];
int houses_in_street[10];
int houses=0;
for (i=0;i<10;i++)
{
    printf("How many houses are there in street %d:\n", i+1);
    scanf("%d",&houses);
    streets[i] = malloc(houses * sizeof(int)); // Allocate array
    houses_in_street[i] = houses;
    for (j=0;j<houses;j++)
    {
        printf("How many kids are there in house number %d, in street number 
%d:\n", j+1, i+1);
        scanf("%d", &streets[i][j]);
    } 
}


for (i=0;i<10;i++)
{
    for (j=0;j<houses_in_street[i];j++)
    {
        printf("Total number of presents required for street:%d house:%d\n= 
%d\n", i+1, j+1, streets[i][j]);

 total_number_of_presents_required=
total_number_of_presents_required+streets[i][j];
    }
}
printf("Total number of presents required in the streets 
is:%d\n",total_number_of_presents_required);

}