使用getchar()函数输入字符串

3
下面的代码使用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);
}

在输入时,如果我按下退格键,它不应该也被getchar()接收并存储在rawString指向的位置中吗?但是输出仅显示最终字符串而没有任何特殊字符。有人能解释一下为什么吗?

2个回答

6

通常情况下,标准输入是有缓冲区的;类似于退格键之类的不可打印字符由终端服务器处理,而像getchar()这样的库函数将永远看不到它们。

如果您需要读取原始按键,则需要使用C标准库之外的内容。


我遇到了类似的问题。你能告诉我可以使用哪个函数吗? - bubble
这取决于您所使用的平台。如果您在*nix系统上,可以使用ncurses。我不确定在现代Windows环境中的等效物是什么。 - John Bode

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

这是Will Work。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接