Как сдвинуть указатель на следующую ячейку в массиве? - C (СИ)
Формулировка задачи:
Есть массив в main, есть функция, в функцию передаётся указатель на начало массива, функция делает вычисления, после должна перевести указатель на следующую ячейку массива. Такая схема не работает:
*string++;
char f_createstring(char *string) { // флаги для проверки ввода int it_is_firstsymbol = 1; //показывает что вводим первый символ (1 - первый символ, 0 - не первый) int it_is_operation = 0; //показывает что ввели операцию (0 - не ввели, 1 - ввели) int it_is_division = 0; //показывает что у нас сейчас обрабатывается операция деления (0 - всё кроме деления, 1 - деление) //переменные int ch; //переменная = полученный символ с клавиатуры int symb_num = 0; //счётчик для защиты от переполнения //char string[MAXOPERATOR]; // while ((ch = getch())!='\r') { if (symb_num == MAXOPERATOR ) //защита от переполнения буффера { printf ("\n\nToo long example! One more again.\n"); //string[0]='\0';//обнулили массив, поставили точку в самом начале return 0; //вышли из программы } if (ch >= '0' && ch <= '9') { if (it_is_division) //да у нас предыдущим было деление { if (ch == '0') //видим что делим на 0 break; //идём лесом else { putchar(ch); *string = ch; } } else { putchar(ch); *string = ch; } } if (ch == '+'||ch == '-'||ch == '*') { if (it_is_firstsymbol) //нельзя вводить первым символом знак операции break; if (!(it_is_operation)) //нельзя вводить две операции подряд { putchar(ch); *string = ch; } it_is_operation = !(it_is_operation); } if (ch == '/') { it_is_division == 1; *string = ch; } /*if (ch == '\b') // для того, чтобы стирать { printf ("\b \b"); fflush(stdout); //если стирать то всё, беда, нужно зачищать этой функцией if (--symb_num < 0) symb_num = 0; continue; }*/ it_is_firstsymbol = 0;//у нас получено число, можно переключить флаг первого числа string++;//взяли следующую ячейку строки symb_num++; } if (ch == '\r') { *string = *(string+1); //взяли следующую ячейку строки, чтобы не испортить данные *string = '\0'; //поставили в ней точку return 1; } }int main () { // перменные // счётчики int num_mistake = 5; //счётчик - у пользователя есть пять попыток не переполнить отведённую планку строки int position = 0; //счётчик - позиция в строке //массивы char string[MAXOPERATOR]; //строка1 - первоначальная запись выражения // ввод данных while(1) { printf ("Enter example:"); // вызов функции формирования строки1 if (f_createstring(string)) break; else if (!(--num_mistake)) { printf ("You have exceeded the number of attempts.. programm is stoped"); return 0; } } // вывод выражения printf ("\nExample is: %s\n",string); getch(); return 0; }
Решение задачи: «Как сдвинуть указатель на следующую ячейку в массиве?»
textual
Листинг программы
string++;
Объяснение кода листинга программы
- Переменная
string
содержит указатель на текущую ячейку в массиве. - Увеличение значения переменной
string
на 1 сдвигает указатель на следующую ячейку в массиве. - Значение переменной
string
теперь указывает на новую ячейку в массиве.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д