Как сдвинуть указатель на следующую ячейку в массиве? - 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++;

Объяснение кода листинга программы

  1. Переменная string содержит указатель на текущую ячейку в массиве.
  2. Увеличение значения переменной string на 1 сдвигает указатель на следующую ячейку в массиве.
  3. Значение переменной string теперь указывает на новую ячейку в массиве.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.2 из 5
Похожие ответы