【问题标题】:is it possible to change what the user types without pressing enter? this is a console program in C是否可以在不按 Enter 的情况下更改用户键入的内容?这是 C 语言中的控制台程序
【发布时间】:2010-09-23 10:40:44
【问题描述】:

这可能吗?这个想法是输入一个密码,然后它会被即时翻译成星号——就像 HTML 上的密码字段一样。我已经编写了这段代码,但它会在用户按下回车后转换输入,而不是在他/她输入时。

#include <stdio.h>
#include <string.h>

#include <iostream>

int main()
{
    char password[11]; int i, j;
    printf("Enter the password : ");
    gets(password);
    system("cls");
    int str_len = (int)strlen(password);
    printf("Enter the password : ");
    for(i = 0;i<2;i++)
    {
         printf(" ");
         for(j=0;j<str_len/2;j++)
         {
             printf("*");
         }
    }
    system("PAUSE>nul");
}

【问题讨论】:

  • 永远不要使用gets()绝不!
  • 感谢先生的提醒。这就是我在各种书籍中读到的内容,但这段代码只是某种草图,我在一小时前创建的那个使用 getch() 将每个字符单独存储到字符数组中。 :D

标签: c++ c


【解决方案1】:

我认为使用标准 io 是不可能的。您需要一个用于更高级文本用户界面(如 ncurses)的库。

【讨论】:

    【解决方案2】:

    如果您确实想从老师那里得到一些额外的分数,您可以查看函数int getch(),它可以满足您的需求。它位于头文件conio.h

    谷歌搜索 getch 应该会为您提供一些信息 - MSDNcplusplus.com 是我最喜欢的页面。

    【讨论】:

    • 谢谢,我也去看看。 :)
    • 是的先生,马泰奥先生。但是在我们大学使用是可以接受的,所以应该接受新代码。我刚刚创建了一个带有计数器的 do-while 循环,它打印星号并将输入放在数组的元素中,只要输入不是退格键、空格键或回车键。
    【解决方案3】:

    不能直接使用标准 C,不。您通常需要说服终端进入“原始”模式,在这种模式下,程序能够在输入每个字符时读取它,即不需要按下回车键。在 raw 模式下,你也可以经常关闭终端内置的任何回显,从而在程序控制下获得键入的字符的显示。

    可以通过输出各种escape codes 来说服终端执行这些操作,但很难判断这是否在您的范围内。此外,这取决于所使用的确切终端(以及平台)。

    【讨论】:

    • 这就是人们使用 ncurses 自动处理所有这些的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    相关资源
    最近更新 更多