3

The following code uses getchar() to accept a line of input.

#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);
}

While typing, if I press backspace, shouldn't it also be received by getchar() & stored in the rawString-pointed location? However the output simply shows the final string without any special characters. Could someone explain why?

2 Answers2

5

Standard input is (usually) buffered; non-printing characters like backspace are handled by the terminal server, and library functions like getchar() will never see them.

If you need to read raw keystrokes, then you will need to use something outside of the C standard library.

John Bode
  • 119,563
  • 19
  • 122
  • 198
  • I am facing the similar problem. Can you tell what function i can use ? – bubble Feb 07 '12 at 14:48
  • That depends on the platform you're on. If you're on a *nix system, you could use ncurses. I'm not sure what the equivalents would be in a modern Windows environment. – John Bode Feb 07 '12 at 14:56
0
#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);
}

This is Will Work.