有没有办法只删除用户输入而不删除整个程序?这是程序

#include <stdio.h>

int main() {
    int a;
    printf("text");
    scanf("%d", &a);
}

如果我做clrscr(),它会删除所有内容,而这不是我想要的.

推荐答案

有两种可能的方法可以解决您的问题:

  • 您可以try 阻止用户输入 echo 到终端.这需要使用特定于系统的调用(如tcgetattr()tcsetattr())来更改终端的配置,这非常棘手且容易出错.

  • 您可以在验证用户输入后,使用ANSI escape sequences向上移动光标并终止行的结尾,try 删除用户输入.这要简单得多,但不是万无一失的,当然它也不会阻止用户在键入敏感数据时用肉眼观看屏幕.

下面是一个例子:

#include <stdio.h>

char *get_string(const char *prompt, char *dest, size_t size) {
    printf("\r%s: \033[K", prompt);
    if (!fgets(dest, size, stdin)))
        return NULL;
    // assuming the cursor is on the next line, move it
    // to the beginning of the line, then up one line, show the prompt again
    // erase the end of the line and skip to the next line
    printf("\r\033[A%s: \033[K\n", prompt);
    return dest;
}

C++相关问答推荐

GCC:try 使用—WError或—pedantic using pragmas

数据包未从DPDK端口传输到内核端口

从组播组地址了解收到的数据包长度

减法运算结果的平方的最快方法?

我可以在C中声明不同长度数组的数组而不带变量名吗?

非常大的数组的大小

双指针指向常量双指针的指针类型赋值不兼容

为什么我不能只在内存地址中添加一个int来寻址任何数组?

在循环中复制与删除相同条件代码的性能

S的这种管道实施有什么问题吗?

为什么我可以在GCC的标签后声明变量,但不能声明Clang?

如何使用libgpio(d)为Raspberry Pi编译C程序?

正数之和是负数

收到不兼容的指针类型警告,因为函数的返回不是空*,而是 struct 指针

当用C打印过多的';\n';时输出不正确

C中的数组下标和指针算法给出了不同的结果

如何打印循环调度问题的时间表

模仿 memmove 的行为

如何转义包含指令中的字符?

可以从指针数组中的值初始化指针吗?