为什么getche()函数在按下回车键时会覆盖输入?

时间:2014-02-14 01:41:36

标签: c

我使用了以下代码:

#include <stdio.h>  
int main()  
{   
  char ch,a[5];  
  int j=0;   
  while((ch=getche())!='\n')  
  {  
    a[j]=ch;  
    j++;  
  }  
  printf("%c",a[2]);  
  return 0;  
}  

当我输入字符并在行尾按输入键时,闪光灯的位置会移动到屏幕的左上角,并且可以输入更多字符,这些字符似乎会覆盖预先存在的字符(但不是)。

使用ch=getchar()而非getche()结束循环并按预期显示值。我是否可以使用getche()获得类似的输出?使用getche() '\n'不会显示输出。但是,使用其他一些字符代替'\n'(例如n)可以正常工作。

1 个答案:

答案 0 :(得分:1)

  1. 根据键盘和stdin存在差异,但getche()获取密钥而不回显。当用户键入 Enter 时,un C-ified char可能是'\n''\r'。打印时,您将获得相应的换行或回车。由于 Enter 映射到键盘上的'\r',因此在通过getche()提取时,请测试并打印'\n'。通过getchar()获取时,C会将 Enter 转换为'\n'

    int ch = getche();
    if (ch == '\r') c = '\n';
    printf("%c", ch);  
    
  2. 使用int ch,因此代码可以检查EOF。