将用户输入存储到两个数组中

时间:2018-05-23 13:32:29

标签: c arrays string loops for-loop

我将提示用户输入他们的街道名称(是单个单词)并用空格分隔他们的门牌号码。用户将在提示符下给我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]);

    }
}

2 个答案:

答案 0 :(得分:1)

C需要二维数组来存储字符串。

#include <stdio.h>

int main (void) {

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

    int i;

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


        printf("Enter street and number: \n");
        scanf("%99s %d", &street[i], &number[i]);
    }
    for (int i=0;i<3;i++) {
        printf("%s ",street[i]);
    }
}

或使用指针,您可以使用malloc来分配内存

#include <stdio.h>

int main (void) {

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

    for (i=0;i<3;i++){
        street[i] = malloc(100);
        printf("Enter street and number: \n");
        scanf("%99s %d", street[i], &number[i]);
    }
    for (int i=0;i<3;i++) {
        printf("%s ",street[i]);
    }
}

答案 1 :(得分:1)

Angela,你的代码中主要犯了 3 错误。

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

第二个你不能在没有分配内存的情况下使用字符串指针。因此在使用 malloc street[i] = (char *)malloc(sizeof(char) * 100);之前应该使用分配代码,然后再读取一些值{{ 1}}。

在c中扫描整数数组时,你必须使用street[i]运算符。所以&语句应为scanf

请尝试修改此代码。这样可以: -

scanf("%s%d", street[i], &number[i]);