Добавление элемента в массив, результат случайного числа - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь добавить картинку к существующему персоналу, используя эту функцию:

Staff addpic(Staff array[], int staffCount)
{
    Staff newStaff = {};    

    printf("type in the name you would like to add pic to \n");
    fgets(newStaff.name, 30, stdin);

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

        if(strcmp(array[i].name,newStaff.name)==0) {
            if(array[i].imagecount<5) {
                printf("type in pic\n");
                int newpic;
                scanf("%d",&newpic);

                array[i].imagecount++;
                int *newpics = realloc(newStaff.pic, (array->imagecount) * sizeof(int));
                newpics[array->imagecount-1] = newpic; 
                newStaff.pic = newpics;
            }
        } 
    }
    return newStaff;
}

, но теперь она работает, как я и надеялся.он добавляет новую картинку, но просто случайное число.исход будет выглядеть так:

type in the name you would like to add pic to 
Anna
type in pic
99
1.Show existing  
2.add pic to a staff
1
Adam    1,2,3,
Anna    1,2,3,-455802818,

1 Ответ

0 голосов
/ 05 марта 2019

Ошибки:

  • array[i] обновляется, но imagecount из array[0] используется для выбора элемента для обновления.
  • array[i].pic isне обновляется, пока array[i].imagecount обновляется.newStaff.pic, который передается в realloc() и обновляется, инициализируется в NULL и не связан с array[i].pic.

Исправлено:

Staff addpic(Staff array[], int staffCount)
{
    Staff newStaff = {};

    printf("type in the name you would like to add pic to \n");
    fgets(newStaff.name, 30, stdin);

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

        if(strcmp(array[i].name,newStaff.name)==0) {
            if(array[i].imagecount<5) {
                printf("type in pic\n");
                int newpic;
                scanf("%d",&newpic);

                array[i].imagecount++;
                /* use array[i].pic instead of newStaff.pic and use array[i].imagecount instead of array->imagecount */
                int *newpics = realloc(array[i].pic, (array[i].imagecount) * sizeof(int));
                /* use array[i].imagecount instead of array->imagecount */
                newpics[array[i].imagecount-1] = newpic; 
                /* update array[i].pic instead of newStaff.pic */
                array[i].pic = newpics;
            }
        } 
    }
    return newStaff;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...