Ввод строки с помощью getchar ()

Следующий код использует getchar () для приема строки ввода.

#include <stdio.h>
#include <stdlib.h>

int main()
{
 char *rawString = (char *)malloc(200*sizeof(char));
 char *rawStringInitial = rawString;
 char c;
 c=getchar();
 while(c!='\n')
 {
  *rawString=c;
  rawString++;
  c=getchar();
 }
 *rawString='\0';
 printf("\n[%s]\n",rawStringInitial);
 return(0);
}

Если при наборе текста я нажму клавишу «backspace», разве он не должен быть получен функцией getchar () и сохранен в месте, указанном на rawString? Однако вывод просто показывает последнюю строку без каких-либо специальных символов. Может кто-нибудь объяснить, почему?


person Community    schedule 07.09.2010    source источник


Ответы (2)


Стандартный ввод (обычно) буферизирован; непечатаемые символы, такие как backspace, обрабатываются терминальным сервером, а библиотечные функции, такие как getchar(), никогда их не увидят.

Если вам нужно читать необработанные нажатия клавиш, вам нужно будет использовать что-то за пределами стандартной библиотеки C.

person John Bode    schedule 07.09.2010
comment
Я столкнулся с аналогичной проблемой. Можете ли вы сказать, какую функцию я могу использовать? - person bubble; 07.02.2012
comment
Это зависит от платформы, на которой вы находитесь. Если вы используете систему * nix, вы можете использовать ncurses. Я не уверен, какие эквиваленты были бы в современной среде Windows. - person John Bode; 07.02.2012

#include<stdio.h>     
#include<conio.h>
#include<string.h>

void get_string(char *string);

void main(){
char *stringVar;
clrscr();
printf("Enter String : ");
get_string(stringVar);
printf("String Enter : %s",stringVar);
getch();
}

void get_string(char *string){
char press;int i=0;
do{
press=getch();
  if(press!=8){
  printf("%c",press);
  string[i]=press;
  i++;
  }
  else if(i>0){printf("\b%c\b",0);sting[i]=NULL;i--;}
}while(press!13);
}

Это будет работать.

person Sambath    schedule 10.05.2017