Я пишу основную c C программу, которая принимает слово от пользователя в качестве ввода и печатает это слово дважды в одной строке. Проблема, с которой я сталкиваюсь при печати слова дважды, упоминается после кода, который я написал ниже для выполнения этой работы
void print_word()
{
char ch;
char str[15];
int i = 0; /* i will be used as index to access the elements of str */
printf ("\n Enter a word of your choice : ") ;
ch = getch() ; /* Dont echo character */
while ( !isspace(ch) && i < 14) /* while loop executes till user doesn't input a space or until the str array is full */
/* isspace() is defined in header file <ctype.h> */
{
putchar(ch); /* Now echo character */
str[i] = ch ;
i++ ;
ch = getch();
} //while loop ends
str[i] = '\0' ;
printf("\t") ; //print a gap
printf ("%s ", str) ;
printf ("%s", str) ;
}
Эта функция работает правильно, если пользователь вводит слово напрямую (без использования клавиши Backspace для редактирования слово).
Предположим, что пользователь вводит 'HELLO', затем 5 символов, а именно 'H' 'E' 'L' 'L' 'O' сохраняется в массиве str. Но затем пользователь нажимает клавишу Backspace три раза, и на консоли появляется слово «HE», а str теперь содержит восемь символов HELLO и 3 символа Backspace. Но когда функция printf в двух последних операторах этого кода выполняется и печатает str, первый оператор правильно печатает 8 символов и отображает «HE» на консоли, а второй оператор печатает «HELLO», оставляя 3 символа возврата на одну позицию, которые также есть в массиве str.
Почему последний оператор printf()
неправильно печатает строку str, т. е. почему он не печатает символы возврата на одну позицию?
Проблема остается, даже если я печатаю str с помощью функции puts()
или даже если str печатается с символом l oop - символ за символом. И я хочу знать, что на самом деле происходит в бэкэнд-процессе?