Хранение пользовательского ввода в двух массивах - PullRequest
0 голосов
/ 23 мая 2018

Я собираюсь предложить пользователю ввести название улицы (это одно слово) и разделить пробелом номер своего дома.Пользователь даст мне 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 голосов
/ 23 мая 2018

Анжела, вы в основном допустили 3 ошибок в своем коде.

Сначала должен иметь массив из 10 элементов int number[10];, а не int *number[10];.Здесь вам нужен только одномерный массив.int *number[10]; Используется для двумерного массива.

Секунда Вы не можете использовать указатель строки без выделения памяти для этого. Поэтому код выделения с использованием malloc 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]);
    }
}
0 голосов
/ 23 мая 2018

C нужен 2-мерный массив для хранения строк.

#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]);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...