Пользовательский код ввода консоли, иногда неправильный вывод - PullRequest
0 голосов
/ 19 декабря 2018

Я тестировал свой код, написав несколько символов и "исправив" его, используя несколько раз подряд возврат на одну позицию.Обычно код работает, но после этой жестокой обработки вывод состоит из нескольких букв с экрана и множества нулевых символов после.Я хочу спамить эту функцию.

Функция получает символ с клавиатуры, а затем проверяет, является ли символ вводом, вводом пробела или строчными буквами, заглавной буквой, если это ввод, добавляет нулевой символ в концеи возвращает, если это буква, она расширяет массив символов на единицу и добавляет символ в конце.если это возврат, он создает другой массив на 1 меньше предыдущего и перемещает на 1 элемент меньше от исходного массива к новому.После этого он удаляет старый массив и назначает новый массив старому указателю.

Я даже исправил ошибку нулевого указателя, которая возникала случайно.

У кого-нибудь есть идеи, почему он выводит мусор?Есть ли способ очистить входной буфер перед загрузкой другого символа?

char* readString()
    {
        int current_char=0;
        char *char_ptr;

        do{
        char_ptr = (char*)calloc(1,sizeof(char));
        }while(char_ptr==NULL);

        while(true)
        {

            char c = getch();

            if(c==13)
            {
                *(char_ptr+current_char)=0;
                printf("\n\n");

                for(int i=0;i<current_char+1;i++)
                {
                    printf("%i \n", *(char_ptr+i));
                }
                return char_ptr;
            }
            if((97<=c && c<=112) || (65<=c && c<=90))
            {
                printf("%c",c);
                *(char_ptr+current_char)=c;
                current_char++;

                do
                {
                    char_ptr = (char*)realloc(char_ptr, sizeof(char)*(current_char+1));
                }while(char_ptr==NULL);


            }
            if(c==8)
            {
                if(current_char==0)
                {
                    continue;
                }
                printf("%c",c);
                printf(" ");
                printf("%c",c);
                current_char--;
                if(current_char==0)
                {
                    free(char_ptr);

                    do{
                    char_ptr = (char*)calloc(1,sizeof(char));
                    }while(char_ptr==NULL);

                }
                else
                {
                    char * next_pointer;

                    do{
                    next_pointer = (char*)calloc((current_char+1),sizeof(char));
                    }while(next_pointer==NULL);

                    memccpy(next_pointer, char_ptr, (current_char), sizeof(char));

                    free(char_ptr);
                    char_ptr=next_pointer;
                    next_pointer=NULL;
                }

            }

        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...