Это гибкое действие неверно:
yylval.id_v = yytext;
yytext
указывает на внутренний рабочий буфер. Его содержимое будет меняться каждый раз, когда вызывается сканер. Поэтому, если вы хотите сохранить строку, которая составляет токен, вы должны скопировать строку в свое собственное хранилище, например, используя strdup
. (Не забудьте освободить выделенное хранилище, когда закончите с ним.)
Я думаю, что вы придерживаетесь ключевой идеи: медианное значение всех значений в четырех массивах - это просто медиана всех значений, поэтому, если мы пройдем половину всех значений, то все, что будет дальше, будет медианой , Я хотел бы предложить структурирование следующим образом:
int firstIndex = 0;
int secondIndex = 0;
int thirdIndex = 0;
int fourthIndex = 0;
double current;
for (int i = 0; i < n/2; i++) {
// 1.) Find the value out of the four at firstIndex, secondIndex, ...
// which is smallest, and assign it to current
// 2.) Increment whichever of the four indices belongs to that element
}
// whatever is in current at the end of the loop is the middle element
Вы, вероятно, хотите функцию findMin(int index1, int index2, int index3, int index4)
. Этот метод также может отвечать за проверки за пределами границ, поэтому основной цикл может просто полагаться на него, чтобы он указывал в правильном направлении, и не заботиться о том, что в нем нет элементов в любом данном массиве.
Имеет ли это смысл? Я попытался оставить достаточно двусмысленности, чтобы позволить вам справиться с большей частью реальной работы по реализации:)