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

Я собираюсь взять ввод пользователя, состоящий из их идентификации и их отметки, разделенных пробелом.Код компилируется, и я могу вводить ответы в ответ на приглашение, однако в конце запроса (конец первого цикла) появляется сообщение «Прерывание прерывания: 6».

Буду признателен, если вы поможете мне выяснить, почему возникает этот комментарий.Я читал, что это может быть от перезаписи другой памяти, но похоже, что мои циклы не выходят за рамки того, что я хотел бы, чтобы они повторялись (пользователь дает мне 10 ответов).

Я также добавил амперсанды перед массивами в scanf, что я счел странным, но код не компилировался иначе.

include

int main (void) {

char id[10];

int mark[10];

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


    printf("Enter ID and mark: \n");



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

    printf("%c ",id[i]);

}

}

1 Ответ

0 голосов
/ 23 мая 2018

Я думаю, что ваше чтение идентификатора неверно, ваши идентификаторы - это строка длиной 7 символов, а ваши char id[10] - это строка из 10 символов (где вы намеревались использовать список строк), вам следуетиспользуйте char *ids[10] вместо.

char *ids[10] = { NULL }; // list of 10 string, initialized to NULL
int mark[10];
for (int i=0;i<10;i++){
    ...
    char* id=malloc(8*sizeof(char)); // allocate a new string to store
    scanf( "%7s %d\n", id, &mark[i] ); // check the result of the scanf to ensure you got the correct input
    ids[i] = id; // store the string at position in the list
}
for (int i=0;i<10;i++){
     printf("%s\n", ids[i]);
}

Также использование отладчика типа GDB поможет вам точно определить, где происходит ошибка в вашем коде.И, вероятно, поможет вам понять вашу ошибку.

...