C 获取字符串而不在控制台上显示它
我想从用户那里得到一个字符串(带空格),但我不希望它显示在控制台上。在C语言中有什么方法可以使之成为可能吗?您可以像这样实现自己版本的C 获取字符串而不在控制台上显示它,c,graphics,C,Graphics,我想从用户那里得到一个字符串(带空格),但我不希望它显示在控制台上。在C语言中有什么方法可以使之成为可能吗?您可以像这样实现自己版本的getch,并屏蔽它。以下示例仅出于日志记录/测试目的而输出输入。您可以通过删除printf调用来禁用该功能 祝你好运 代码列表 参考资料 在终端上隐藏密码输入,访问2014-07-18 我猜您想禁用用户键入的回显字符。您可以使用中的函数设置终端属性,如下所示: #include <stdio.h> #include <unistd.h>
getch
,并屏蔽它。以下示例仅出于日志记录/测试目的而输出输入。您可以通过删除printf
调用来禁用该功能
祝你好运
代码列表
参考资料
我猜您想禁用用户键入的回显字符。您可以使用
中的函数设置终端属性,如下所示:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <termios.h>
#define MAX_LINE_SIZE 512
int main (int argc, char *argv[])
{
/* get terminal attributes */
struct termios termios;
tcgetattr(STDIN_FILENO, &termios);
/* disable echo */
termios.c_lflag &= ~ECHO;
tcsetattr(STDIN_FILENO, TCSAFLUSH, &termios);
/* read a line */
char line[MAX_LINE_SIZE] = { 0 };
fgets(line, sizeof(line), stdin);
/* enable echo */
termios.c_lflag &= ~ECHO;
tcsetattr(STDIN_FILENO, TCSAFLUSH, &termios);
/* print the line */
printf("line: %s", line);
return 0;
}
#包括
#包括
#包括
#包括
#定义最大线尺寸512
int main(int argc,char*argv[])
{
/*获取终端属性*/
结构termios termios;
tcgetattr(标准文件号和termios);
/*禁用回音*/
termios.c_lflag&=~ECHO;
tcsetattr(标准文件号、TCSAFLUSH和termios);
/*读一行*/
字符行[最大行大小]={0};
fgets(生产线、尺寸(生产线)、标准DIN);
/*启用回音*/
termios.c_lflag&=~ECHO;
tcsetattr(标准文件号、TCSAFLUSH和termios);
/*打印行*/
printf(“行:%s”,行);
返回0;
}
上面的示例读取一行(不回显字符),然后将该行打印回终端。不在标准C中。据你所知,甚至可能没有控制台。可能看一看(n)个诅咒,或者给出平台,程序应该运行的位置。最接近标准的是
getpass
。请参见关于可能的替代方案的问题:[图形]在这里似乎是一个相当不合适的标签。找不到任何与控制台输入相关的内容?是否使用Visual c的头文件?抱歉,这是针对Unix环境的。现在Windows很少使用C语言,所以我认为您有Linux环境或类似的环境。Windows没有(至少),也许您可以在这里找到一个等效的:
gcc test.c && ./a.out
Press x to exit.
ch = a (97)
ch = b (98)
ch = c (99)
ch = 1 (49)
ch = 2 (50)
ch = 3 (51)
ch =
(10)
ch =
(10)
ch = x (120)
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <termios.h>
#define MAX_LINE_SIZE 512
int main (int argc, char *argv[])
{
/* get terminal attributes */
struct termios termios;
tcgetattr(STDIN_FILENO, &termios);
/* disable echo */
termios.c_lflag &= ~ECHO;
tcsetattr(STDIN_FILENO, TCSAFLUSH, &termios);
/* read a line */
char line[MAX_LINE_SIZE] = { 0 };
fgets(line, sizeof(line), stdin);
/* enable echo */
termios.c_lflag &= ~ECHO;
tcsetattr(STDIN_FILENO, TCSAFLUSH, &termios);
/* print the line */
printf("line: %s", line);
return 0;
}