首页 > 解决方案 > 将用户输入存储到两个数组中

问题描述

我将提示用户输入他们的街道名称(是一个单词)并用空格分隔,即他们的门牌号。用户将在提示时给我其中的 10 个。

我要将街道名称放入一个数组中,将门牌号放入另一个数组中。到目前为止,我的代码如下所示。它会导致分段错误。我已经阅读了我所有的笔记,但我仍然不确定为什么会发生这种情况。任何帮助是极大的赞赏。(注意,第二个循环是查看街道数组是否正确存储了它的元素)。

#include <stdio.h>

int main (void){

    char *street[10]; 
    int *number[10]; 

    int i;

    for (i=0;i<10;i++){


        printf("Enter street and number: \n");


        scanf(" %s %d", street[i], number[i]);
    }
    for (int i=0;i<10;i++){

        printf("%s ",street[i]);

    }
}

标签: carraysstringloopsfor-loop

解决方案


安吉拉,你的代码主要犯了3 个错误。

首先要有一个 10 个元素的整数数组 int number[10];不是 int *number[10];。这里你只需要一个一维数组。int *number[10];用于二维数组。

其次,您不能在不为此分配内存的情况下使用字符串指针。因此,在将某些 street[i] = (char *)malloc(sizeof(char) * 100);值读取到street[i].

第三,在c中扫描整数数组时,您必须使用&运算符。所以scanf语句应该是 scanf("%s%d", street[i], &number[i]);

请尝试此修改后的代码。这将起作用:-

#include <stdio.h>
#include <stdlib.h>

int main(void)
{

    char *street[10];
    int number[10];                                     // not *number[10]
    int i;

    for (i = 0; i < 10; i++)
    {

        printf("Enter street and number: \n");
        street[i] = (char *)malloc(sizeof(char) * 100); // assuming the max-string size is 100
        scanf("%s%d", street[i], &number[i]);           // not number[i]
        getchar();                                      // for handling un managed '\n' (enter-keys)
    }
    for (int i = 0; i < 10; i++)
    {

        printf("%s\n", street[i]);
    }
}

推荐阅读