2010-09-07 8 views
3

Le code suivant utilise getchar() pour accepter une ligne d'entrée.Chaîne d'entrée utilisant 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); 
} 

Tout en tapant, si je presse backspace, ne doit pas être reçu, il aussi par getchar() & stockés à l'emplacement rawString-pointu? Cependant, la sortie affiche simplement la chaîne finale sans caractères spéciaux. Quelqu'un pourrait-il expliquer pourquoi?

Répondre

5

L'entrée standard est (généralement) tamponnée; Les caractères non-impression comme backspace sont gérés par le serveur Terminal Server et les fonctions de bibliothèque telles que getchar() ne les verront jamais.

Si vous devez lire des frappes brutes, vous devrez utiliser quelque chose en dehors de la bibliothèque standard C.

+0

Je suis confronté au même problème. Pouvez-vous dire quelle fonction je peux utiliser? – bubble

+0

Cela dépend de la plate-forme que vous utilisez. Si vous utilisez un système * nix, vous pouvez utiliser ncurses. Je ne suis pas sûr de ce que les équivalents seraient dans un environnement Windows moderne. –

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

Ceci est Will Work.

Questions connexes