Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 获取字符串而不在控制台上显示它_C_Graphics - Fatal编程技术网

C 获取字符串而不在控制台上显示它

C 获取字符串而不在控制台上显示它,c,graphics,C,Graphics,我想从用户那里得到一个字符串(带空格),但我不希望它显示在控制台上。在C语言中有什么方法可以使之成为可能吗?您可以像这样实现自己版本的getch,并屏蔽它。以下示例仅出于日志记录/测试目的而输出输入。您可以通过删除printf调用来禁用该功能 祝你好运 代码列表 参考资料 在终端上隐藏密码输入,访问2014-07-18 我猜您想禁用用户键入的回显字符。您可以使用中的函数设置终端属性,如下所示: #include <stdio.h> #include <unistd.h>

我想从用户那里得到一个字符串(带空格),但我不希望它显示在控制台上。在C语言中有什么方法可以使之成为可能吗?

您可以像这样实现自己版本的
getch
,并屏蔽它。以下示例仅出于日志记录/测试目的而输出输入。您可以通过删除
printf
调用来禁用该功能

祝你好运

代码列表


参考资料


  • 在终端上隐藏密码输入,访问2014-07-18

  • 我猜您想禁用用户键入的回显字符。您可以使用
    中的函数设置终端属性,如下所示:

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