Мыслитель (9693), на голосовании 2 месяца назад
Проблема с передачей массива в функцию. Язык Си
void polish_symb(char* input, int input_len) {
char arr_symb[LEN] = { 0 }; //Массив с математическими операндами
int arr_index[LEN] = { 0 }; //Массив с индексами операндов
char arr_digits[LEN] = { 0 }; //Массив с числами, без операндов
int i = 0; //Итератор
int j = 0; //Итератор
int flag = 0; //Для обработки знаков с пробелами (12 + 13)
for (; i < input_len; i++) {
if (input[i] == 32) { //Если обрабатывается пробел, то нужно сделать сдвиг
flag++;
continue;
}
else if (input[i] >= '0' && input[i] <= '9') { //Обработка цифр
arr_digits[i - flag] = input[i];
}
else if (input[i] == '+' || input[i] == '-' || input[i] == '*' || input[i] == '^' || input[i] == '!' || input[i] == '_') { //Обработка математических операндов
arr_symb[j] = input[i];
arr_index[j] = i - flag;
arr_digits[i - flag] = ' ';
j++;
}
else { //Если есть ошибки в вводе
return;
}
}
arr_symb[j] = 'E'; //Конец строки
arr_symb[j + 1] = '\0';
arr_index[j] = input_len - flag; //Для корректной обработки пробелов
arr_digits[i] = ' '; //хз зачем
arr_digits[i + 1] = '\0';
//symb_find(arr_symb, arr_index, arr_digits, j + 1);
for (int i = 0; i < j+1; i++) {
if (arr_symb[i] == '+') {
plus_symb(arr_digits, arr_index[i], arr_index[i + 1]); //Передаем в функцию сложения массив с элементами, индексы расположения знаков
del_start_symb(arr_symb, 1); //Удаляем знак из строки
del_start_symb(arr_index, 1); //Удаляем индекс знака из строки
}
}
}
//Процедура для обработки выражения
void symb_find(char* arr_symb, int arr_index[], char* arr_digits, int len) {
//Нет поддержки умножения
for (int i = 0; i < len; i++) {
if (arr_symb[i] == '+') {
plus_symb(arr_digits, arr_index[i], arr_index[i + 1]); //Передаем в функцию сложения массив с элементами, индексы расположения знаков
del_start_symb(arr_symb, 1); //Удаляем знак из строки
del_start_symb(arr_index, 1); //Удаляем индекс знака из строки
}
}
}
Код выше.
Если строку symb_find(arr_symb, arr_index, arr_digits, j + 1); раскоментировать, то функция symb_find неправильно принимает arr_index. Как это можно исправить?
Однако, цикл, написанный в symb_find корректно работает в polish_symb
Исправил. Ошибка была в другом блоке кода
Дополнен 3 месяца назад